A simple, secure daily check-in application built as a Cloudflare Python Worker. Track your progress, plan your day, and share your mood with your team via Slack or email notifications.
β οΈ Security Note: The current implementation uses base64 encoding as a placeholder for encryption. For production use with sensitive data, implement proper AES-GCM encryption using the Web Crypto API. See SECURITY.md for details.
npm install -g wrangler
wrangler login
wrangler d1 create checkin-db
Note the database ID from the output and update it in wrangler.toml:
[[d1_databases]]
binding = "DB"
database_name = "checkin-db"
database_id = "your-database-id-here"
wrangler d1 execute checkin-db --file=./schema.sql
wrangler kv:namespace create "KV"
Update the KV namespace ID in wrangler.toml:
[[kv_namespaces]]
binding = "KV"
id = "your-kv-id-here"
Generate a secure encryption key and add it to your wrangler.toml:
[vars]
ENCRYPTION_KEY = "your-secure-random-key-here"
Or use secrets for production:
wrangler secret put ENCRYPTION_KEY
wrangler deploy
Your app will be live at: https://blt-sizzle-checkin.your-subdomain.workers.dev
Email notifications require additional setup with an email service provider. Configure your email service settings in the worker environment variables:
EMAIL_API_KEY: Your email service API keyEMAIL_FROM: Sender email addressSupported providers:
The app will send you a reminder at your configured time with a link directly to the check-in form. Simply click the link and fill out your check-in!
βββββββββββββββββββ
β Browser Client β
β (HTML/JS/CSS) β
ββββββββββ¬βββββββββ
β
βΌ
βββββββββββββββββββ
β Python Worker β
β (index.py) β
ββββββββββ¬βββββββββ
β
ββββββββββββββββ
βΌ βΌ
ββββββββββββββββ ββββββββββββββββ
β D1 Database β β Slack/Email β
β (Encrypted) β β Notificationsβ
ββββββββββββββββ ββββββββββββββββ
user_id: Unique user identifieremail: Optional email for notificationsslack_webhook_url: Slack webhook URLnotification_time: Preferred reminder timetimezone: Userβs timezoneemail_notifications: Email notification preferenceuser_id: Reference to userencrypted_previous_work: Encrypted previous accomplishmentsencrypted_today_plan: Encrypted todayβs plansencrypted_blockers: Encrypted blockers/challengesmood: Emoji representing moodcheckin_date: Date of check-inGET / - Main check-in formGET /settings - Notification settings pagePOST /api/checkin - Submit a check-inGET /api/checkin/latest - Get latest check-in for pre-fillingGET /api/settings - Get user settingsPOST /api/settings - Save user settingsPOST /api/notification/test - Send a test notificationTo enable automatic daily notifications, add a cron trigger to your wrangler.toml:
[triggers]
crons = ["0 9 * * *"] # Run at 9 AM UTC daily
Then implement the scheduled handler in your worker to check user notification times and send reminders.
wrangler dev
This starts a local development server at http://localhost:8787
http://localhost:8787 in your browserContributions are welcome! Please feel free to submit a Pull Request.
This project is part of OWASP BLT and follows the same license terms.
wrangler.tomlwrangler d1 execute checkin-db --file=./schema.sqlwrangler tailwrangler.tomlFor issues and questions, please open an issue on GitHub or contact the OWASP BLT team.
Made with β€οΈ by OWASP BLT