Talk it into a list. Tick it off.
ZipList is a warm little voice checklist for groceries, errands, packing, gear, chores, and all the small things you just need to get down.
No setup. No dates. No priorities.
Tap the mic, say the pile, and ZipList turns it into a clean checklist. Add more whenever. Drag things around. Tick them off. That is the whole point.
As a PWA: Save to your home screen and use it like a tiny checklist app. Good for groceries, packing, gear, chores, set lists, and housemate runs.
Live sharing: Contributor mode can turn a list into a live link so multiple people see the same checklist update.
Chrome Extension: The app includes an extension info modal, but the packaged extension bundle is not currently part of this repo.
Need Node.js 20.18.1+ and npm 10.8.0+.
# Grab it
git clone https://github.com/yourusername/ziplist.git
cd ziplist
# Install the goods
npm install
# Fire it up
npm run dev
# Build when you're ready
npm run build
npm run dev - Start the shownpm run build - Make it production-readynpm run preview - Test your buildnpm run dev:party - Start local PartyKit on port 1999npm run format - Clean up the code (Prettier)npm run lint - Catch the rough edges (ESLint)npm run lighthouse - Performance checkZipList uses a server-side speech processing route. Set:
GEMINI_API_KEY=your_gemini_api_key_here
Do not use VITE_GEMINI_API_KEY for the main app runtime. VITE_* vars are exposed to the browser.
If you want PartyKit live sharing in a deployed environment, also set:
VITE_PARTYKIT_HOST=your-actual-host.partykit.dev
PARTYKIT_HOST=your-actual-host.partykit.dev
PARTYKIT_CREATE_SECRET=long_random_secret_also_set_in_partykit
Leave it unset for solo/demo deployments and ZipList will stay in clean solo mode.
For local two-device testing, run npm run dev:party; Vite dev clients on
your LAN will use port 1999.
Contributor checkout and unlock codes use:
CONTRIBUTOR_LICENSE_SECRET=long_random_secret_at_least_16_chars
CONTRIBUTOR_UNLOCK_CODES=ZL-DEMO-CODE
PUBLIC_APP_URL=https://ziplist.app
SQUARE_ACCESS_TOKEN=your_square_access_token
SQUARE_LOCATION_ID=your_square_location_id
SQUARE_WEBHOOK_SIGNATURE_KEY=your_square_webhook_signature_key
SQUARE_WEBHOOK_NOTIFICATION_URL=https://ziplist.app/api/square/webhook
/src
├── lib/components/list/ # List cards and checklist controls
├── lib/components/mainPage/ # Voice recording UI + modals
├── lib/services/lists/ # List state and item logic
├── lib/services/realtime/ # PartyKit live-list bridge
├── lib/services/transcription/ # Audio processing flow
├── lib/services/theme/ # Color personality system
├── lib/services/pwa/ # PWA installation support
├── routes/ # SvelteKit pages and server endpoints
└── ../party/listRoom.ts # PartyKit room server
Ziplist adapts its look and feel to match your mood:
Choose once, it remembers. Because good tools should feel like they know you.
The app has an extension info modal, but this repo does not currently include a packaged extension bundle. Treat the extension as a future/placeholder surface until the files are added.
When that ships, keep install instructions next to the actual downloadable extension artifact.
Lists should not make you set up a system before you can write the thing down.
This is for anyone who has stood in a store trying to remember what they needed, anyone who thinks better out loud, and anyone who wants a checklist without the task-app baggage.
Talk. List. Tick.
MIT License • Built with care • Contributions welcome