.work
DotWorkBot
A shift with zero web pages: the whole marketplace fits in a chat, while a background process carries the production load.
the essence
A one-off shift marketplace that lives entirely in Telegram: an employer posts a shift, a worker takes it, and a dedicated taskiq worker keeps the marketplace's 'physics' running on its own, nudging arrivals, releasing no-shows, and closing expired orders as the single leader via a Redis lock.
Under the hood
A live kanban board for a gig-shift marketplace, not a list of fields. Try it below and see how it works inside.
This is the live board of a gig-shift marketplace, and you play the employer. Workers claim shifts on their own: some never show up, some leave mid-shift, and most work through and submit the job for your review: accept it or reject it. Wind the clock to watch the whole day, or post a shift of your own.
Pick a type: window and rate autofill. Publish and it lands in 'Open'.
Window: ·
- @ramil free
- @dilara free
- @artur free
- @lena free
- @timur free
- @sofia free
_operational_control_loop sleeps · awaiting a tick
3 roles: worker · employer · admin PostgreSQL · Redis (FSM/throttle/lock) · MinIO/S3 photos · AES backups · VPS deploy with rollback
scale
size and timeframe: what stands behind the product.
architecture
Bot API: user updates in, outgoing messages out
- aiogram bot Bot API
Separate process: periodic shift and backup loops
- operational ctrl
- Redis · FSM lock
Polling dispatcher: role routers, session and ban middleware
- PostgreSQL 16
- Redis · FSM
- MinIO · S3
Shift physics: reminders, release no-shows, auto-close
- PostgreSQL 16
- Telegram notify
FSM storage, worker leader lock, backup markers
Orders, assignments, users, ratings, broadcasts
Order photos in S3-compatible storage, public URLs
stack
- Language 1
- Framework 4
- Data 3
- Infrastructure 4
- Client 3
Language
- Python 3.12
Framework
- aiogram 3.27
- SQLAlchemy 2
- pydantic-settings
- structlog
Data
- PostgreSQL 16
- Redis
- MinIO / S3
Infrastructure
- Docker Compose
- Alembic
- taskiq
- pyzipper AES backups
Client
- Telegram Bot API
- reply keyboards
- inline keyboards
what it does
the product's key capabilities right now.
Roles and flows
Worker, employer, and admin get separate menus and access filters; worker sign-up is a step-by-step FSM with phone, city, and geolocation.
Orders and shifts
Order creation, multi-slot assignments, an open → in_progress → completed/cancelled lifecycle, and notifications to all participants.
Operational control
The taskiq worker sends arrival reminders, releases unconfirmed workers, and closes expired orders by itself.
Broadcasts and safety
New-order broadcasts targeted by city with dedup, admin broadcasts, plus rate-limiting and ban checks in middleware.
Backups and deploy
AES-encrypted backups (pg_dump + a mirror of the MinIO bucket), restore scripts, and VPS auto-deploy with health-check rollback.
Ratings and storage
Worker ratings in a dedicated model and order photos in S3-compatible storage: large binaries kept out of the relational DB.
timeline
how the product grew from its first version.
-
6 May 2026
Start and MVP
Worker/employer/admin roles, multi-slot orders, taskiq worker, MinIO, ratings, and broadcasts: the full core on day one.
-
7-8 May 2026
Production, backups, and monitoring
A VPS deploy pipeline with health rollback, AES-encrypted backups of pg_dump and the MinIO mirror, then Portainer for container monitoring and an order-creation validation fix.
-
1 Jul 2026
Hardening and audit before release
DotCore-standard docs, then pre-release hardening: role-based access filters, a non-root container, pinned dependency versions, log secret redaction, card numbers cut to the last four digits, and presigned MinIO links instead of public photo access. Git history was scrubbed, and the audit passes clean with a green badge.