Files
Fossign/README.md
2026-01-23 13:54:58 +01:00

2.0 KiB
Raw Blame History

Flask Digital Signage (simple)

Lightweight digital signage platform using Flask + SQLite.

Features

  • Central admin can manage companies, users, displays.
  • Admin can impersonate any company user (no password).
  • Company users can:
    • Create playlists
    • Add slides (image/video/webpage)
    • Assign playlists to displays
  • Displays are public 16:9 player webpages suitable for kiosk browsers.

Quickstart (Windows)

python -m venv .venv
.venv\Scripts\activate
pip install -r requirements.txt

set FLASK_APP=app
flask init-db --admin-user admin --admin-pass admin
flask run --debug

If Flask can't discover the app automatically, use:

set FLASK_APP=app:create_app
flask run --debug

Open http://127.0.0.1:5000

Notes

  • SQLite DB is stored at instance/signage.sqlite.
  • Uploaded files go to app/static/uploads/.

SMTP / Forgot password

This project includes a simple forgot password flow. SMTP configuration is read from environment variables.

Recommended: put these in a local .env file in the repo root. Flask (via python-dotenv) will auto-load it on startup. .env is already gitignored.

You can start from .env.example:

copy .env.example .env

Example

REM Option A: set env vars in the same terminal where you run `flask run`
set SMTP_HOST=smtp.strato.de
set SMTP_PORT=587
set SMTP_USERNAME=beheer@alphen.cloud
set SMTP_PASSWORD=***
set SMTP_FROM=beheer@alphen.cloud
set SMTP_STARTTLS=1
set SMTP_DEBUG=1

REM Option B: put the same keys/values in a .env file instead

Security note: do not commit SMTP passwords to the repo. Prefer secrets management and rotate leaked credentials.

Troubleshooting mail delivery

If the reset email is not received:

  1. Set SMTP_DEBUG=1 and request a reset again.
  2. Watch the Flask console output for SMTP responses / errors.
  3. Verify:
    • SMTP_USERNAME and SMTP_FROM are allowed by your provider.
    • You are using STARTTLS (port 587).
    • The recipient mailbox isnt filtering it (spam/quarantine).