Inspiration
Many small business owners, including spaza shop owners and street vendors, still rely on notebooks to keep track of sales, customer debts, and stock. This can make it difficult to remember who owes money, identify popular products, or know when stock is running low. Internet connectivity can also be unreliable in the communities where these businesses operate. Tabbook was created to provide a simple digital alternative to the traditional notebook. The goal was to make managing a small shop easier without requiring a constant internet connection.
What it does
Tabbook is a free, offline-first bookkeeping application designed for small shops.
Sales: Record purchases quickly, whether customers pay immediately or buy on credit.
Customer tabs: Track outstanding debts and record partial payments.
Stock management: Monitor product quantities and receive low-stock alerts.
Sales insights: Review weekly sales, identify best-selling products, and monitor overdue payments.
Offline access: Continue recording sales without an internet connection and synchronize them when connectivity returns.
How we built it
Tabbook combines a modern web interface with a database and offline storage.
Frontend: Next.js, React, and TypeScript, with Progressive Web App (PWA) functionality.
Backend: Supabase, using PostgreSQL for data storage and email-based authentication.
Data security: Row-level security ensures that shop owners can access only their own records.
Offline functionality: A service worker caches essential application resources, while IndexedDB stores sales locally until they can be synchronized.
Reliable synchronization: Each sale receives a unique ID on the device, preventing duplicate records when an upload is retried.
Data consistency: A database function processes the sale, its items, and the associated stock updates within a single transaction.
Challenges we ran into
One of the biggest challenges was ensuring that offline sales could synchronize reliably. If an upload failed, retrying it could potentially create duplicate transactions. We addressed this by assigning unique IDs to sales and using an idempotent database function. Another challenge was making the application usable without internet access. The essential application resources, products, and customer information needed to remain available offline. This required service-worker caching and local data storage. We also encountered development environment issues, including Windows script permissions, inconsistent environment variable names, and Supabase email-confirmation settings. Resolving these problems helped us understand the importance of configuration and systematic debugging.
Accomplishments that we're proud of
We are proud to have developed a working application that addresses practical problems faced by small shop owners.
Offline sales recording: We tested the application in browser offline mode to verify that sales could be recorded without connectivity and synchronized when the connection returned.
Reliable transactions: Unique sale IDs and idempotent processing help prevent duplicate sales, while transactional database operations keep sales and stock updates consistent.
Data privacy: Row-level security separates each shop's information, even when multiple shops use the same database.
End-to-end development: The application was built independently, from the initial concept to a working product with authentication, shop setup, sales recording, customer tabs, inventory management, and weekly insights.
Installable application: Users can install Tabbook from their browser on compatible phones and computers.
Simple user experience: The interface focuses on quick sales entry and a clear view of outstanding customer debts, keeping everyday shop management straightforward.
What we learned
Developing Tabbook gave us practical experience with multi-tenant database security, offline web applications, service workers, IndexedDB, and reliable data synchronization. We also learned why idempotency is important when systems retry operations and how database transactions help maintain consistent records.
What's next for Tabbook
The next step is to pilot Tabbook with ten small shops and gather feedback from actual users. Future improvements could include supplier reorder links, in-app payment options, and a more robust synchronization system as the application grows.
Our long-term goal is to give small business owners a practical, accessible tool that helps them manage their money, customers, and stock without depending on reliable internet access.
Built With
- idb-keyval
- indexeddb
- next.js
- node.js
- postgresql
- react
- row-level
- security
- security:
- service-workers
- sql-offline-first-functionality:-progressive-web-app-(pwa)
- tailwind-css-backend-&-database:-supabase
- typescript
Log in or sign up for Devpost to join the conversation.