Welcome. A simple bot needs to be created for warehouse employees who will send a photo report from the warehouse in the morning. The technical specifications are written with the help of GPT. Simpler ideas are welcome. The main thing is that it works. Step instruction - then photo - and the next step. And it should be sent to the manager.
1) Goal and expected effect
2) User roles
Employee (warehouse worker): receives individual tasks for their areas; sends photo + checklist; receives feedback.
Shift supervisor: sees the dashboard of performance for the shift, accepts/rejects reports, opens incidents.
Objective
Create a simple Telegram bot that sends a step-by-step task to one employee every day at 09:30: to photograph key areas in two warehouses + the returns area + the cloakroom. After completion, the bot sends a summary to the manager.
Scenario (user → bot)
09:30 — the bot sends: “Start the check.”
Stage 1 — Warehouse No. 1:
Photo of each row (the row is fully visible, the passage is not blocked).
Photo of the overall view of warehouse No. 1.
Rules: goods only on shelves; by articles (do not mix); nothing on the floor; the floor is clean; documents are sorted.
Stage 2 — Warehouse No. 2:
Photo of each row (full length of the row).
Photo of the overall view of warehouse No. 2.
Rules as above: cleanliness, passages, no trash and “temporary” boxes.
Stage 3 — Returns area:
1 photo of the returns area.
Rules: intact — together; damaged/incomplete — separately, labeled; nothing on the floor; arranged in blocks by articles.
Stage 4 — Cloakroom/wardrobe/printer:
Finish — the bot shows the summary “Report sent to the manager.”
Immediate photo rejections (the bot shows a hint and asks to retake)
The entire row is not visible or passages are blocked.
Goods on the floor or mixed articles.
Trash/plastic/boxes in the working area.
Blurry/dark photo.
Roles
Result for the manager
After completion — one message of the type:
Where to deploy this in Laravel and how
Tech stack
Laravel 10/11 (your existing project).
DB: SQLite/PostgreSQL (for the pilot, SQLite can be used).
Queues: Redis (or sync for testing).
Files: locally storage/app/public/photos (for the pilot), later — S3/MinIO.
Packages (composer)
composer require irazasyed/telegram-bot-sdk:^3.0 predis/predis:^2.0
(If you already have another SDK — okay.)
ENV (example)
TELEGRAM_BOT_TOKEN=xxxx
TELEGRAM_BOT_NAME=warehouse_pilot_bot
APP_URL=https://your-domain
TIMEZONE=Europe/Warsaw
REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379
QUEUE_CONNECTION=redis # or sync for the pilot
Routes
POST /bot/telegram/webhook # receiving updates
Controller/Service
App\Http\Controllers\BotWebhookController@handle — receives updates, manages the state “which stage/which row”.
Simple state in the DB: who is at which step, how many photos are already there.
Minimum tables
bot_users (id, telegram_id, role[worker|manager], name).
runs (id, worker_id, date, started_at, finished_at, status).
run_photos (id, run_id, stage[wh1|wh2|returns|cloak], note, path, created_at).
(For the pilot, KPI/checkboxes are not stored — only photos and stages.)
Scheduler
Webhook
After deployment:
curl -F "url=https://your-domain/bot/telegram/webhook" \
https://api.telegram.org/bot$TELEGRAM_BOT_TOKEN/setWebhook
Deployment
Everything in the existing Laravel project.
For testing, nginx + PHP-FPM + HTTPS (Let’s Encrypt) is sufficient.
In production — Supervisor for queue:work (or for now QUEUE_CONNECTION=sync).
Freelancer's scope of work
What to do
Connect Telegram webhook in Laravel.
Implement a step-by-step flow with 4 stages (including hints “what the photo should look like”).
Store photos locally, grouping by “morning/date/stage”.
After completion — send a summary to the manager (one message with an album).
Commands for the scheduler and instructions for setting up the webhook.
Set up a simple “reset” command /reset for the pilot (to reset progress).
Acceptance
At 09:30 the employee receives a reminder.
Completes all 4 stages, the bot accepts valid photos, rejects invalid ones (according to the rules above).
The manager receives one summary message with photos and stage labels.
Re-running on the same day is possible with the command /start or /reset (for testing).
Delivery
Repository (Git) + README.md with instructions.
.env.example filled with bot fields.
Migrations (bot_users, runs, run_photos).
Commands: php artisan schedule:work (for testing), php artisan queue:work (if needed).
Supervisor setup (optional).
Appendix: reference hints for photos (to be displayed in the bot before the step)
Warehouse No. 1 (each row + overall):
— The row in the frame completely; passages clean; goods on shelves, not on the floor; no “temporary” boxes; articles not mixed.
Warehouse No. 2 (each row + overall):
— The same: full length of the row, clean, no unnecessary items, articles separately.
Returns area:
— Intact — together; damaged/incomplete — separately and labeled; nothing on the floor; order visible in the photo.
Cloakroom/printer:
— Personal items in cabinets; shoes neatly arranged; the floor is clean; the table with the printer is tidy; paper/tape/adhesive tape is available.
This text can be published directly on freelance. If needed, I will compile it into a PDF/Word and provide it as a file along with a short response template for candidates to make it easier to compare offers.