Gabriel20xx e5e72a39ac Refactor database access to use a unified dbAdapter for SQLite and PostgreSQL
- Replaced direct database calls with dbAdapter methods in fieldRoutes, itemRoutes, listRoutes, syncRoutes, and webRoutes.
- Implemented a new db.ts file to handle database interactions for both SQLite and PostgreSQL.
- Added WebSocket support for real-time synchronization in WebSocketSyncClient and ws.ts.
- Updated TypeScript configuration to include WebSocket types.
- Created a new WebSocket server for handling sync requests and responses.
- Ensured compatibility with both SQLite and PostgreSQL by using parameterized queries.
2025-10-25 17:02:42 +02:00

CollabTable

A collaborative list management system with Android app and server for creating and managing shared lists with custom fields and items.

Overview

CollabTable allows multiple users to collaboratively create and manage lists with custom fields. Perfect for:

  • Shopping lists with price tracking
  • Product catalogs
  • Task management with custom attributes
  • Any structured data collection

Features

Android

  • Beautiful Material 3 design with dynamic colors
  • 📱 Native Android app with Jetpack Compose
  • 💾 Offline-first with Room database
  • 🔄 Automatic synchronization with server
  • 🎨 Custom fields (name, link, price, category, etc.)
  • ✏️ Real-time editing of items
  • 🗑️ Soft delete support
  • ⚙️ Configurable server URL in settings

Server

  • 🚀 Express.js REST API with TypeScript
  • 🐳 Fully containerized with Docker
  • 💾 SQLite database with persistent storage
  • 🔄 Sync protocol for conflict resolution
  • 📊 Complete CRUD operations

Quick Start

Server (Docker)

cd CollabTableServer
docker-compose up -d

Server runs on http://localhost:3000

Android App

  1. Open CollabTableAndroid in Android Studio
  2. Wait for Gradle sync
  3. Run on emulator or device
  4. Go to Settings (gear icon) to configure server URL
    • For emulator: http://10.0.2.2:3000/api/
    • For physical device: http://YOUR_COMPUTER_IP:3000/api/

Project Structure

CollabTable/
├── CollabTableAndroid/    # Android app
│   ├── app/
│   │   ├── src/main/java/com/collabtable/app/
│   │   │   ├── data/      # Database, API, repositories
│   │   │   └── ui/        # Compose UI, screens, theme
│   │   └── build.gradle
│   └── README.md
│
└── CollabTableServer/     # Node.js server
    ├── src/
    │   ├── models/        # MongoDB models
    │   └── routes/        # API endpoints
    ├── Dockerfile
    ├── docker-compose.yml
    └── README.md

Technology Stack

Android

  • Kotlin
  • Jetpack Compose
  • Material 3
  • Room Database
  • Retrofit
  • Coroutines & Flow

Server

  • Node.js
  • Express
  • TypeScript
  • SQLite (Sequelize ORM)
  • Docker

API Endpoints

  • GET/POST /api/lists - Manage lists
  • GET/POST /api/fields - Manage fields
  • GET/POST /api/items - Manage items
  • POST /api/sync - Synchronize data
  • GET /health - Health check

See Server README for detailed API documentation.

Development

Android Development

cd CollabTableAndroid
# Open in Android Studio

Server Development

cd CollabTableServer
npm install
npm run dev

Data Model

List

Contains multiple fields and items

Field

Defines a column/attribute (name, price, category, etc.)

Item

A row in the list with values for each field

ItemValue

The actual value for a specific field of an item

Synchronization

The sync protocol uses timestamps to determine which changes to apply:

  1. Client sends all local changes since last sync
  2. Server merges changes and returns server-side updates
  3. Client applies server updates locally
  4. Latest timestamp wins in conflicts

License

MIT

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

S
Description
A collaborative list management system with Android app and server for creating and managing shared lists with custom fields and items.
Readme
658 KiB
Languages
Kotlin 84.7%
TypeScript 15.2%