# Gadget Code A modern self-hosted and open source Agentic Engineering Environment. Gadget Code is a hackable TypeScript/Node.js web application - and application development framework - built with Express, React, Vite, and Tailwind CSS. Gadget Code is a Gab-first initiative. It is most well-tested and tuned for use with [Gab.ai](https://gab.ai) as your "Big Brain" compute provider. However, it is designed to be easily adaptable for use with other compute providers as well as your own local Ollama, vLLM, or other OpenAI _or_ Ollama API-compatible setup. ## Architecture ``` ┌─────────────────────────────────────────────────────────────┐ │ Vite Dev Server (HTTPS) │ │ https://code-dev.g4dge7.com:5174 │ │ │ │ ┌───────────┐ ┌───────────┐ ┌───────────┐ │ │ │ /auth │ │ /api │ │ static │ │ │ │ proxy │ │ proxy │ │ files │ │ │ └────┬──────┘ └────┬──────┘ └───────────┘ │ │ │ │ │ │ ▼ ▼ │ │ ┌─────────────────────────────┐ │ │ │ Backend (HTTP) │ │ │ │ http://localhost:3443 │ │ │ │ - Express API │ │ │ │ - Socket.io │ │ │ │ - Session (Redis) │ │ │ │ - MongoDB │ │ │ └─────────────────────────────┘ │ └─────────────────────────────────────────────────────────────┘ ``` ## Tech Stack - **Frontend**: React 19, Vite 8, Tailwind CSS 4, Socket.io Client - **Backend**: Express 5, TypeScript, Socket.io Server - **Database**: MongoDB (Mongoose) - **Cache/Session**: Redis (ioredis + connect-redis) - **File Storage**: MinIO - **Testing**: Vitest, Playwright ## Getting Started ### Prerequisites - Node.js 22+ - pnpm 10+ - MongoDB running on localhost:27017 - Redis running on localhost:6379 - SSL certificates in `ssl/` directory ### Installation ```bash pnpm install ``` ### Development ```bash # Start both backend and frontend pnpm dev:backend # Backend on http://localhost:3443 pnpm dev:frontend # Frontend on https://localhost:5174 ``` ### Build ```bash pnpm build # Build backend + frontend pnpm build:backend # Build TypeScript only pnpm build:frontend # Build React/Vite only ``` ### Testing ```bash pnpm test # Run vitest unit tests npx playwright test # Run E2E integration tests ``` ## Scripts Your environment can be managed with the following package.json scripts and npx commands. | Command | Description | | --------------------- | -------------------------- | | `pnpm build` | Build backend + frontend | | `pnpm test` | Run vitest unit tests | | `npx playwright test` | Run E2E tests | | `pnpm dev:backend` | Start backend (port 3443) | | `pnpm dev:frontend` | Start frontend (port 5174) | | `pnpm start` | Start production build | ## Environment Variables ```env # Required DTP_USER_PASSWORD_SALT="your-password-salt" DTP_JWT_SECRET="your-jwt-secret" DTP_SESSION_SECRET="your-session-secret" # MongoDB DTP_MONGODB_HOST="localhost" DTP_MONGODB_DATABASE="gadget-code" # Redis DTP_REDIS_HOST="localhost" DTP_REDIS_PORT="6379" # HTTPS DTP_HTTPS="enabled" DTP_HTTPS_HOST="localhost" DTP_HTTPS_PORT="3443" DTP_HTTPS_KEY_FILE="/path/to/ssl/key.pem" DTP_HTTPS_CRT_FILE="/path/to/ssl/cert.pem" # Session DTP_SESSION_TRUST_PROXY="enabled" DTP_SESSION_COOKIE_SECURE="enabled" DTP_SESSION_COOKIE_SAMESITE="strict" ``` ## Features - User authentication (sign in, sign out) - JWT-based session management - RESTful API structure - Socket.io real-time communication - File upload support (MinIO) - Email notifications - Tailwind CSS frontend with dark theme ## Project Structure ``` /src /config # Environment configuration /controllers # Express route handlers /lib # Core utilities /models # Mongoose models /services # Business logic /frontend /src /components # React components /pages # React pages /lib # Frontend utilities /public # Static assets vite.config.ts # Vite configuration /tests /e2e # Playwright tests ``` ## API Endpoints | Method | Endpoint | Description | | ------ | ---------------- | ------------------ | | POST | `/auth/sign-in` | Authenticate | | GET | `/auth/sign-out` | Sign out | | GET | `/api/v1/user` | Get current user | ## License SEE LICENSE IN LICENSE