Безкоштовна онлайн-платформа для проєктування деталей з листового металу і генерації виробничих креслень (DXF + PDF + STEP) — без CAD-навичок.
Користувач без навичок CAD заходить на сайт, вибирає типовий виріб (L-кронштейн, кутник, полиця, перфо-панель, …), крутить повзунки розмірів і матеріалу, бачить миттєвий 3D-прев'ю і скачує готові DXF + PDF + STEP, з якими можна йти на будь-яке локальне виробництво лазерного різання та гибки.
До 10 експортів на місяць безкоштовно. Далі — добровільний донат від 200 грн на ЗСУ → +1 місяць безкоштовного користування.
Платформа неприбуткова, open source (MIT).
[Browser]
├─ Параметрична форма (Next.js + react-three-fiber)
├─ 3D-прев'ю в реальному часі (OpenCascade.js)
└─ Live-валідація проти технологічних обмежень
↓
[Fastify API]
├─ Auth.js (email + Google OAuth)
├─ Лічильник 10 безкоштовних / місяць
└─ Постановка задачі у чергу (BullMQ)
↓
[Python CAD Worker (CadQuery)]
├─ Точна розгортка з K-фактором
├─ Експорт DXF (з шарами під лазер) + PDF (з ізометрією і BOM) + STEP
└─ Завантаження у Cloudflare R2
↓
[Browser отримує presigned URL → завантаження]
Передумови: Docker (або Docker Desktop), Node.js 20.11+ (через nvm), pnpm 9+ (corepack enable pnpm), Python 3.12 (через uv, потрібен для CAD-воркера — Phase 1+).
# 1. Клон + setup
git clone https://github.com/stjurik/flatcraft.git
cd flatcraft
corepack enable pnpm # активує pnpm з Node 20+
pnpm install
cp .env.example .env
# 2. Інфраструктура (Postgres 16 + Redis 7 + MinIO + Mailpit)
docker compose up -d
docker compose ps # усі мають бути healthy
# 3. Міграції + seed (7 матеріалів × 10 товщин + 5 шаблонів)
pnpm db:migrate
pnpm db:seed
# 4. Запуск web + api (cad-worker — Phase 1+)
pnpm devПеревірка:
- web — http://localhost:3000 (
flatcrafthero + 3D-куб) - api —
curl http://localhost:4000/health→{"status":"ok",...} - MinIO — http://localhost:9001 (
minioadmin/minioadmin) - Mailpit — http://localhost:8025
pnpm typecheck # tsc --noEmit для всіх workspace
pnpm lint # eslint
pnpm test # vitest unit + integration
pnpm --filter @flatcraft/web exec playwright test # e2e (потребує chromium: pnpm exec playwright install chromium)CI на GitHub Actions проганяє lint + typecheck + test + build + e2e на кожен push та PR.
CLAUDE.md— головний контекст для Claude Code (читайте першим)AGENTS.md— опис підпроєктівdocs/00_OPEN_QUESTIONS.md— невирішені питанняdocs/02_ROADMAP.md— план до MVP (12 тижнів)docs/03_DECISIONS.md— Architecture Decision Recordsdocs/04_RISKS.md— реєстр ризиківdocs/05_DATA_MODEL.md— схема БДdocs/06_API_CONTRACT.md— REST APIdocs/07_BEND_MACHINE_SPEC.md— обмеження листозгинальної машини
| Шар | Технологія |
|---|---|
| Frontend | Next.js 15 + TypeScript + react-three-fiber + Tailwind + shadcn/ui |
| Backend API | Fastify + TypeScript + Zod |
| CAD-engine (browser) | OpenCascade.js |
| CAD-worker (server) | Python 3.12 + CadQuery + FastAPI |
| База даних | PostgreSQL 16 + Drizzle ORM |
| Storage | Cloudflare R2 (S3-compatible) / MinIO у dev |
| Cache & Queue | Redis + BullMQ |
| Auth | Auth.js v5 |
| Container | Docker + docker-compose |
| Hosting | Mirohost Cloud (тариф MS21: 2 vCPU / 4 GB / 40 GB, ДЦ Київ) + Cloudflare DNS/proxy |
| Observability | Sentry + Plausible |
| CI/CD | GitHub Actions |
| IaC | Ansible (Terraform не використовуємо — Mirohost не має провайдера; див. ADR-011) |
flatcraft/
├── apps/
│ ├── web/ # Next.js
│ └── api/ # Fastify
├── workers/
│ └── cad/ # Python CadQuery
├── packages/
│ ├── cad-engine/ # CAD utilities, validators, k-factor
│ ├── db/ # Drizzle schema + migrations + seed
│ ├── types/ # Zod schemas, shared DTOs
│ └── ui/ # shadcn/ui + custom components
├── infra/
│ ├── docker/
│ ├── compose/
│ └── ansible/ # налаштування Mirohost Cloud сервера
├── docs/ # ADR, roadmap, data model, …
├── tools/scripts/
├── CLAUDE.md
├── AGENTS.md
└── README.md
Проєкт open source, MIT. Ласкаво просимо PR-и, але:
- Прочитайте
CLAUDE.mdіdocs/02_ROADMAP.md. - Кожен PR має тести (TDD).
- Conventional Commits (
feat:,fix:, …). - Squash merge у
main.
Discord для координації: (посилання буде після створення сервера)
Платформа — соціальний проєкт без юрособи на старті. Усі донати йдуть напряму через офіційні фонди:
- 🇺🇦 Monobank банка (посилання буде)
- 🌍 UNITED24
Платформа не виступає одержувачем коштів. Розблокування ліміту після донату — це знак подяки, а не зустрічна послуга.
MIT — див. LICENSE.
Зроблено для DIY-ентузіастів, малого бізнесу та локальних виробників. Слава ЗСУ.