ΠροσωπικόΠαραδομένο2024–present

TaskFlow

Lead Developer

Offline-first task-dispatch PWA για ομάδες φιλοξενίας. Realtime updates μέσω Socket.IO, BullMQ scheduler για επαναλαμβανόμενες εργασίες, IndexedDB mutation queue ώστε η εφαρμογή να δουλεύει όταν πέφτει το Wi-Fi. Multi-tenant SaaS, live και δωρεάν στο tasks.jimrarras.com.

Αποτελέσματα

αρχεία αυτόματων ελέγχων
178
ξεχωριστές περιοχές, από εργασίες ως δωμάτια και ειδοποιήσεις
12
καταστάσεις που περνά μια εργασία, από τη δημιουργία ως την έγκριση
8
TaskFlow

Stack

  • Fastify
  • PostgreSQL + Drizzle
  • Redis + BullMQ
  • Socket.IO
  • React 19
  • TanStack Query
  • IndexedDB

Η κατάσταση

Σε ένα ξενοδοχείο, μια κουζίνα ή έναν χώρο εκδηλώσεων, η δουλειά μοιράζεται σε χαρτάκια και σε φωνές στον διάδρομο. Το προσωπικό κινείται συνέχεια, και το Wi-Fi είναι καλό στη ρεσεψιόν και ανύπαρκτο στο υπόγειο. Έχτισα το TaskFlow μόνος μου για να αντέχει ακριβώς αυτό: να μοιράζει εργασίες σε βάρδιες που δεν κάθονται μπροστά σε υπολογιστή, και να μη χαλάει όταν χάνεται το σήμα. Είναι ζωντανό και δωρεάν για όποια ομάδα το θέλει.

Δουλεύει και χωρίς σήμα

Η εφαρμογή δεν σταματά όταν πέσει το δίκτυο. Ό,τι κάνει κάποιος εκτός σήματος μπαίνει σε ουρά πάνω στη συσκευή του και ξαναπαίζει μόλις επιστρέψει η σύνδεση, με τη σειρά που έγινε.

Το δύσκολο δεν είναι η ουρά, είναι τι κάνεις όταν ο server πει οριστικά όχι.

Πώς λειτουργεί
  • Η ουρά: κάθε POST, PATCH και DELETE που γίνεται εκτός δικτύου γράφεται σε ένα store του IndexedDB με χρονοσήμανση και ξαναπαίζει ταξινομημένο κατά χρόνο.
  • Τι μπλοκάρει τι: οι ενέργειες πάνω στην ίδια οντότητα εξαρτώνται μεταξύ τους, η έναρξη πριν την υποβολή, οπότε μια κολλημένη ενέργεια κρατά πίσω μόνο τη δική της εργασία και όχι ολόκληρη την ουρά.
  • Τι ξαναδοκιμάζεται: τα 408 και 429 καθαρίζουν μόνα τους και επαναλαμβάνονται. Κάθε άλλο 4xx είναι οριστικό όχι: σβήνεται από την ουρά και εμφανίζεται ως ειδοποίηση με την ενέργεια που απορρίφθηκε.
  • Τι υπάρχει offline: ο service worker κρατά το κέλυφος της εφαρμογής και τις απαντήσεις του API με NetworkFirst και όριο πέντε δευτερολέπτων, ώστε μια μισάνοιχτη σύνδεση να μην κρεμάει την οθόνη.
  • Ενημερώσεις με ερώτηση: η νέα έκδοση δεν ενεργοποιείται μόνη της. Ρωτάει, γιατί ένα deploy στη μέση της βάρδιας αλλιώς αλλάζει την εφαρμογή κάτω από τα χέρια του χρήστη.

Κάθε εργασία ξέρει σε ποιον ανήκει

Μια εργασία ή δίνεται σε συγκεκριμένο άτομο ή μπαίνει σε δεξαμενή και τη διεκδικεί όποιος είναι διαθέσιμος. Από εκεί και πέρα προχωράει σε συγκεκριμένα βήματα, και κανείς δεν μπορεί να την πάει εκεί που δεν επιτρέπεται.

Πώς λειτουργεί
  • Οκτώ καταστάσεις: pending, in_pool, assigned, claimed, in_progress, submitted, approved, redo.
  • Ένας πίνακας μεταβάσεων: όλες οι επιτρεπτές κινήσεις ζουν σε ένα κοινό πακέτο και ελέγχονται με την ίδια συνάρτηση σε server και client, οπότε δεν υπάρχει δεύτερη εκδοχή του κανόνα.
  • Η εξαίρεση του διαχειριστή: ο εργαζόμενος δεν γυρίζει ποτέ μια εργασία πίσω. Ο διαχειριστής μπορεί να την παρκάρει στην αρχή του πίνακα, με το submitted εξαιρεμένο και το approved τελικό.
  • Realtime: τα γεγονότα βγαίνουν από τα routes του API και ακυρώνουν το αντίστοιχο cache στον client, οπότε η οθόνη ενημερώνεται χωρίς να την ανανεώσει κανείς.

Τις επαναλήψεις δεν τις θυμάται άνθρωπος

Το turnover των δωματίων και το checklist της παράδοσης βάρδιας μπαίνουν μία φορά ως πρότυπο και εμφανίζονται μόνα τους όταν πρέπει.

Πώς λειτουργεί
  • Κάθε λεπτό: ένας worker του BullMQ ελέγχει τα προγράμματα κάθε 60 δευτερόλεπτα και δημιουργεί όσες εργασίες έχουν ωριμάσει.
  • Τρεις ρυθμοί: ημερήσια, εβδομαδιαία και μηνιαία επανάληψη, όλες από πρότυπα εργασιών.
  • Σε ποιον ανήκει: η δημιουργία τρέχει από την ουρά στον server και όχι από τον browser κάποιου, οπότε δεν εξαρτάται από το ποιος έχει ανοιχτή την εφαρμογή.

Πολλές ομάδες, ένα σύστημα

Δύο ξενοδοχεία στο ίδιο deployment δεν βλέπουν το ένα τη δουλειά του άλλου, και μέσα σε κάθε ομάδα ο υπεύθυνος και ο εργαζόμενος δεν βλέπουν την ίδια εφαρμογή.

Πώς λειτουργεί
  • Διαχωρισμός δεδομένων: κάθε οντότητα κουβαλάει tenantId και κάθε ερώτημα είναι περιορισμένο σε αυτό.
  • Τρεις ρόλοι: superadmin, admin και worker, με τη διεπαφή χωρισμένη σε ξεχωριστές περιοχές ανά ρόλο και έλεγχο πρόσβασης στη δρομολόγηση.
  • Δύο τρόποι εισόδου: κωδικός για τους διαχειριστές, PIN τεσσάρων ως έξι ψηφίων για τους εργαζόμενους. Τα access tokens ζουν 15 λεπτά, τα refresh tokens 7 ημέρες, αποθηκευμένα ως hash και εναλλασσόμενα σε κάθε χρήση.
  • Δωμάτια realtime: το Socket.IO βάζει κάθε σύνδεση σε δωμάτια ανά ομάδα, ανά χρήστη, ανά δεξαμενή και ανά εργασία, οπότε μια ενημέρωση φτάνει μόνο σε όσους αφορά.
  • Πώς στήνεται: Fastify 5 με PostgreSQL και Drizzle, Redis για την ουρά και το realtime, όλα σε ένα monorepo με δύο εφαρμογές και τρία κοινά πακέτα.

Σύνδεσμοι

Παρόμοια έργα

  • Komvos Connect: άλλο multi-tenant SaaS, αλλά για κρατήσεις ραντεβού αντί για task dispatch
  • Γηροκομείο collection-app: άλλο offline-first mobile workflow, αλλά native Android scanner αντί για PWA
Επικοινωνία

Ρυθμίσεις εμφάνισης

Κείμενο

Μέγεθος κειμένου
Απόσταση γραμμών
Απόσταση γραμμάτων

Χρώμα

Αντίθεση

Κίνηση και εικόνες

Ανάγνωση

Βοήθημα ανάγνωσης
Καμία αλλαγή