166 lines
5.5 KiB
Markdown
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
|