A dot-matrix symbol designer and composer application with AI-powered symbol generation.
This is a monorepo containing two packages:
packages/client- React frontend application (Vite + TypeScript)packages/server- REST API service for AI symbol generation (Express + TypeScript)
- Symbol Designer: Create and edit 9x7 pixel symbols for characters (A-Z, 0-9, punctuation)
- Message Composer: Arrange symbols into scrolling messages up to 80 characters
- AI Integration: Generate symbols using Claude Sonnet 4 (via client-side API or server API)
- Symbol Management: Save, copy, paste, and export symbols
- Navigation: React Router-based navigation with browser history support
- REST API: HTTP endpoints for AI symbol generation
- Claude Integration: Uses Claude Sonnet 4 for intelligent symbol generation
- Validation: Request validation with proper error handling
- CORS Support: Configured for client application integration
# Start both client and server
npm run dev:all
# Or start individually
npm run dev # Client only (default)
npm run dev:server # Server only- Client: http://localhost:5173
- Server: http://localhost:3001
- Health Check: http://localhost:3001/health
# Install all dependencies
npm install
# Build all packages
npm run build
# Run tests (client)
npm run test
# Type checking (all packages)
npm run typecheck
# Linting (all packages)
npm run lint# Run commands in specific workspace
npm run dev --workspace=packages/client
npm run build --workspace=packages/server
# Or use workspace shortcuts
npm run dev # → packages/client
npm run dev:server # → packages/serverThis project uses a hierarchical environment configuration system:
.env.local- Local development overrides (ignored by git).env- Production/shared environment variables (tracked by git).env.example- Template with example values (tracked by git)
For Development:
# Copy example and customize for local development
cp packages/client/.env.example packages/client/.env.local
# Edit .env.local with your local settingsEnvironment Variables:
# packages/client/.env.local (for development)
VITE_AI_SERVICE_URL=http://localhost:3001For Development:
# Copy example and customize for local development
cp packages/server/.env.example packages/server/.env.local
# Edit .env.local with your actual API keyEnvironment Variables:
# packages/server/.env.local (for development)
ANTHROPIC_API_KEY=your_actual_anthropic_api_key_here
PORT=3001packages/
├── client/
│ ├── .env.example # Template (tracked)
│ ├── .env # Production config (tracked)
│ └── .env.local # Development config (ignored)
└── server/
├── .env.example # Template (tracked)
├── .env # Production config (tracked)
└── .env.local # Development config (ignored)
Security Notes:
.env.localfiles are git-ignored and contain sensitive data.envfiles are tracked for production deployment- Always use
.env.localfor development with real API keys
The application uses a server-side AI integration approach:
- Client: Makes HTTP requests to the REST API service
- Server: Handles Claude AI integration with enhanced prompts
- Benefits: No API key exposure in browser, centralized AI logic, enhanced prompts
- Requirements: Server must be running for AI functionality
This project uses npm workspaces for monorepo management. Each package maintains its own dependencies while sharing common development tools at the root level.
- Frontend: React 19, TypeScript, Vite, @react-rxjs
- Backend: Express, TypeScript, Claude AI SDK
- Testing: Playwright (E2E)
- Validation: Zod
- State Management: RxJS with @react-rxjs