A professional-grade, privacy-first AI Image & Video generation studio
Features β’ Quick Start β’ Tech Stack β’ Docs β’ Contributing
|
|
|
|
- Node.js 18+
- npm 9+
- API keys from Google AI Studio and/or Venice.ai
# Clone the repository
git clone https://github.com/AbstergoSweden/image_app_01.git
cd image_app_01
# Install dependencies
npm install
# Configure environment
cp .env.example .env.local
# Edit .env.local with your API keys
# Start development server
npm run devOpen http://localhost:3000 in your browser.
For automated setup (recommended for CI/new developers):
chmod +x setup_jules.sh
./setup_jules.sh| Category | Technology |
|---|---|
| Frontend | React 19, TypeScript 5.8 |
| Build Tool | Vite 6 |
| Styling | Tailwind CSS |
| Icons | Lucide React |
| Testing | Vitest (unit), Playwright (E2E) |
| Linting | ESLint 9 + Prettier |
| Storage | IndexedDB (blobs), localStorage (metadata) |
| Security | PBKDF2 + AES-GCM, zxcvbn |
| PWA | vite-plugin-pwa + Workbox |
image_app_01/
βββ π .github/ # GitHub templates & workflows
β βββ ISSUE_TEMPLATE/ # Bug report & feature request templates
β βββ PULL_REQUEST_TEMPLATE.md
βββ π e2e/ # Playwright E2E tests
β βββ app.spec.ts
βββ π src/
β βββ π components/ # React UI components
β β βββ AuthScreen.tsx # Login/registration with password strength
β β βββ ChatScreen.tsx # AI chat interface
β β βββ Gallery.tsx # Image gallery with pagination
β β βββ ImageGenScreen.tsx # Main generation interface
β β βββ ...
β βββ π services/ # API clients & storage
β β βββ geminiService.ts # Google Gemini API
β β βββ veniceService.ts # Venice.ai API
β β βββ secureStorage.ts # Encrypted localStorage
β β βββ blobStorage.ts # IndexedDB for images
β βββ π utils/ # Helper functions
β β βββ crypto.ts # Encryption utilities
β β βββ migrations.ts # Data format migrations
β β βββ passwordStrength.ts
β βββ π types/ # TypeScript definitions
β βββ π workers/ # Web Workers
β βββ App.tsx # Main application
β βββ main.tsx # Entry point
βββ π index.html # HTML shell
βββ π vite.config.ts # Vite + PWA configuration
βββ π tsconfig.json # TypeScript configuration
βββ π eslint.config.js # ESLint flat config
βββ π playwright.config.ts # E2E test configuration
βββ π package.json # Dependencies & scripts
| Command | Description |
|---|---|
npm run dev |
Start development server |
npm run build |
Production build to dist/ |
npm run preview |
Preview production build |
npm run test |
Run unit tests (Vitest) |
npm run test:e2e |
Run E2E tests (Playwright) |
npm run lint |
Run ESLint |
npm run format |
Format code with Prettier |
npm run typecheck |
TypeScript type checking |
npm run preflight |
Full CI check (types + lint + test + build) |
Create a .env.local file (or set in your deployment):
# Google Gemini API Key
# Get one from: https://aistudio.google.com/apikey
GEMINI_API_KEY=your_gemini_key_here
# Venice.ai API Key
# Get one from: https://venice.ai/settings/api
VENICE_API_KEY=your_venice_key_hereπ‘ Tip: API keys can also be entered directly in the app's Settings screen.
This application follows security best practices:
- Client-side encryption: All user data is encrypted with AES-GCM before storage
- PBKDF2 key derivation: Passwords are never stored; they derive encryption keys
- Password strength: Registration requires minimum strength score (zxcvbn)
- No telemetry: Zero data sent to external servers (except AI API calls)
- CSP-ready: Content Security Policy compatible architecture
See SECURITY.md for vulnerability reporting.
npm run test # Run once
npm run test:watch # Watch mode# Install Playwright browsers (first time only)
npx playwright install chromium
# Run E2E tests
npm run test:e2e
# Run with UI
npm run test:e2e:uiWe welcome contributions! Please see CONTRIBUTING.md for guidelines.
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Make your changes
- Run
npm run preflightto verify - Commit (
git commit -m 'Add amazing feature') - Push (
git push origin feature/amazing-feature) - Open a Pull Request
- Large bundle size (~1.3MB) - consider code splitting
- Some components use
anytypes - TypeScript strict mode pending - State management is prop-drilling - consider Zustand/Jotai for scale
- Code splitting for faster initial load
- Full TypeScript strict mode compliance
- State management refactor (Zustand)
- Cloud sync option (optional, encrypted)
- Mobile app (React Native / Capacitor)
This project is licensed under the MIT License - see LICENSE for details.
Built with β€οΈ for the AI art community
