gadget/gadget-code/README.md
2026-04-28 09:20:37 -04:00

166 lines
5.5 KiB
Markdown

# 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"
# User Signup
DTP_USER_SIGNUP="enabled"
```
## Features
- User authentication (sign up, 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-up` | Create new account |
| POST | `/auth/sign-in` | Authenticate |
| GET | `/auth/sign-out` | Sign out |
| GET | `/api/v1/user` | Get current user |
## License
SEE LICENSE IN LICENSE