A retro Windows 99-style shared calendar for syncing work schedules with your crew. Boot into a VGA BIOS screen, log in, and land on a vibrant desktop where everyone's shifts are visible in real time.
- 🖥️ VGA BIOS boot animation with terminal-style auth
- 📅 Weekly calendar with color-coded shift blocks per user
- 👥 Group invite codes — share a code, your crew joins
- 📷 Screenshot OCR — upload a work schedule image and shifts auto-populate
- ⚙️ Settings: choose your shift color, pick a desktop theme
- 🔄 Real-time sync — shifts appear instantly for everyone in the group
- 8 desktop themes: Vaporwave, Midnight, Forest, Retrowave, Candy, Arctic, Matrix, Sunset
- Node.js 18+
- A Supabase account (already configured — see below)
cd shift-sync
npm installThe .env file is already populated with your Supabase project credentials. If you ever need to reset it, copy from .env.example.
Because Shift Sync uses username-only login (no real email), you must disable email confirmation:
- Go to supabase.com/dashboard
- Open the shift-sync project
- Go to Authentication → Settings
- Under Email Auth, turn off "Confirm email"
- Save
npm run dev- Push this folder to a GitHub repo
- Go to netlify.com → Add new site → Import from Git
- Select your repo
- Build command:
npm run build - Publish directory:
dist - Under Environment variables, add:
VITE_SUPABASE_URL=https://pzayxiqsrgnanavmpyyq.supabase.coVITE_SUPABASE_ANON_KEY= (your anon key from .env)
- Deploy!
npm install -g netlify-cli
npm run build
netlify deploy --prod --dir=dist- Boot sequence plays automatically
- Enter a username of your choice — this creates your account
- Enter a password — save it, there's no recovery currently
- Choose to Create a crew or Join with a code
- If creating: share your 6-character invite code with friends
- If joining: paste the code a friend sent you
- Click + Add Shift in the calendar header
- Manual tab: pick date, start/end time
- Screenshot OCR tab: upload a photo of your work schedule — Shift Sync extracts the dates and times automatically
- Double-click the Settings icon on the desktop
- Change your shift color (what everyone sees on the calendar)
- Change the desktop theme
| Layer | Tech |
|---|---|
| Frontend | React 18 + Vite |
| Database & Auth | Supabase (PostgreSQL + Row Level Security) |
| OCR | Tesseract.js (runs in browser, no API key needed) |
| Hosting | Netlify |
src/
App.jsx # Session check, phase routing
components/
BootScreen.jsx # VGA BIOS animation + auth + group flow
Desktop.jsx # Windows 99-style desktop shell
Window.jsx # Draggable window component
Taskbar.jsx # Bottom taskbar with clock
DesktopIcon.jsx # Desktop icons
CalendarWindow.jsx # Weekly calendar with shift blocks
SettingsWindow.jsx # Color picker + theme presets
ShiftEntryModal.jsx # Manual entry + OCR upload
lib/
supabase.js # All Supabase auth + data helpers
ocr.js # Tesseract.js OCR + schedule parser
| Table | Purpose |
|---|---|
profiles |
Username, shift color, theme preference |
groups |
Crew name + invite code |
group_members |
Who's in which crew |
shifts |
Individual shift entries per user per day |
All tables use Row Level Security — users can only see data for their own crew.