Streamlit-based resource planning application with:
- Secure login and user administration
- Task scheduling (Weekly and Monthly)
- Task ownership audit (created/updated by)
- Capacity and demand analytics charts
- Neon Postgres persistence
- SMTP-based temporary password emails
-
Authentication and account management
- Login with email/password
- Change password
- Admin create/reset/deactivate users
- Session persistence across refresh (cookie + DB session)
-
Task planning
- Weekly tasks: select one or more weekdays (Monday-Sunday)
- Monthly tasks: select day of month (1-31)
- Shift-aware validation for task time windows
-
Analytics and charts
- Weekly view: Monday-Sunday pattern
- Monthly view: calendar-style chart for selected month
- Shift/global required vs available FTE trends
- Python 3.14+
- Streamlit
- Plotly
- Pandas
- Psycopg (Postgres driver)
- Neon Postgres
resource_planner_app.py- Main Streamlit applicationresource_planner/planner.py- Data model, DB operations, recurrence logicplot_monthly_resource.py- CLI chart generator for a monthrequirements.txt- Python dependencies.eve- Local environment/config values (ignored in git)
- Python installed
- Access to a Neon Postgres database
- SMTP credentials for email notifications (optional but recommended)
Create/update .eve in project root:
DATABASE_URL="postgresql://<user>:<password>@<host>/<db>?sslmode=require&channel_binding=require"
SMTP_SERVER="smtp.azurecomm.net"
SMTP_PORT="587"
SMTP_SENDER_EMAIL="<sender-identity>"
FROM_EMAIL="<sender-identity>"
TO_EMAIL="<notification-recipient>"
SMTP_USERNAME="mailrelay-kofax"
SMTP_PASSWORD="<smtp-password>"Notes:
DATABASE_URLis required.- App reads values from environment variables first, then
.eve.
From project root:
python -m venv .venv
.venv\Scripts\activate
pip install -r requirements.txtstreamlit run resource_planner_app.pypython plot_monthly_resource.py --month 2026-04Optional args:
--team-fte--interval--db--output
The app initializes/migrates required tables automatically on startup:
userstasksuser_sessions
- Do not commit
.eveto source control. - Rotate database and SMTP credentials if they were exposed.
- Session tokens are stored hashed in DB.
-
Login lost on refresh:
- Ensure browser cookies are enabled.
- Ensure
user_sessionstable exists and DB is reachable.
-
SMTP emails not sent:
- Verify SMTP credentials and sender format.
- Check firewall/proxy for outbound SMTP port 587.
-
DB connection issues:
- Verify
DATABASE_URLin.eve. - Ensure Neon host allows your network.
- Verify