Easy-to-manage touch screens
무료 오픈소스 터치스크린으로 USB 설정 가이드, 드래그‑드롭 편집기, 로컬 제어를 제공하며 Home Assistant용으로 제작되었습니다
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기Referensimplementation av AI-drivet utvecklingsarbete — TDD, BDD dual-loop, refactor under regelverk, review-matris.
저장소 README에서 가져옴
README 전체를 불러오는 중입니다.
README 전문 보기 ↗title: "Equinet - Bokningsplattform för Hästtjänster" description: "Projektöversikt, setup-guide, teknisk stack och implementerade funktioner" category: root tags: [setup, overview, getting-started] status: active last_updated: 2026-10-01 related:
En komplett MVP i produktion — och en levande demonstration av hur man bygger seriös mjukvara med AI som arbetspartner.
🌐 Live: equinet-staging.johanlindengard.com (klicka på knappen "se demo som leverantör")
Equinet kopplar hästägare med tjänsteleverantörer (hovslagare, veterinärer, hästspecialister). Den är redo att användas av riktiga användare och är i händerna på våra testpersoner idag.
Men för dig som tittar in från GitHub är repot framförallt något annat: en kompromisslös referensimplementation av hur jag jobbar med AI.
RED → GREEN → REFACTOR, integration → unit → integration. npm run check:all är fyra gates som måste vara gröna före PR.docs/architecture/refactor-triggers.md listar T1–T12. Refactor som inte mappar till en konkret trigger händer inte.docs/ideas/epic-*.md och .claude/rules/story-refinement.md..claude/rules/review-matrix.md mappar src/app/api/**/route.ts → /security-review + /code-review automatiskt..claude/rules/api-routes.md, ios-learnings.md, rls-learnings.md laddas automatiskt beroende på vilka filer som rörs.docs/retrospectives/, inklusive process-kost-retros om reviewer-token-användning.För full kontext: läs CLAUDE.md (utvecklingsguide) och .claude/rules/ (kontextspecifika regler).
Inte ett portfolio-projekt byggt för att se snyggt ut. Det är produktivkod i drift, och varje praktik finns för att den löste ett konkret problem — flertalet dokumenterade i docs/retrospectives/.
.nvmrc. Andra
huvudversioner (t.ex. Node 20 eller 26) ger falska testfel, se docs/guides/gotchas.md #42)brew install supabase/tap/supabase (lokal auth + DB + RLS)Klona projektet
git clone <repository-url>
cd equinet
Aktivera rätt Node-version
Med nvm (rekommenderat — läser .nvmrc automatiskt):
nvm install # första gången
nvm use
Med Homebrew (om du inte använder nvm):
brew install node@24
export PATH="/opt/homebrew/opt/node@24/bin:$PATH" # lägg i ~/.zshrc för att slippa upprepa
npm run test:run (och check:all) stoppar tidigt med ett tydligt felmeddelande om
fel Node-huvudversion är aktiv.
Installera beroenden
npm install
Sätt upp environment variables
# Kopiera example-fil till .env
cp .env.example .env
Viktiga environment variables:
DATABASE_URL: PostgreSQL connection string (lokal Supabase port 54322)NEXT_PUBLIC_SUPABASE_URL: Supabase projekt-URL (lokal: http://127.0.0.1:54321)NEXT_PUBLIC_SUPABASE_ANON_KEY: Supabase anon keySUPABASE_SERVICE_ROLE_KEY: Supabase service role key (server-only)
.env.examplehar lokal Supabase som default med standardnycklar. För produktion: avkommentera alternativ 2.
Starta lokal databas och seeda
# Starta lokal Supabase (PostgreSQL + Auth + RLS + triggers + Storage-buckets)
npm run db:up
# Kör migrationer + generera Prisma Client
npm run setup
# Seeda med testdata
npm run db:seed
npm run db:up skapar även de två Supabase Storage-bucketsen appen använder
(message-attachments, equinet-uploads) automatiskt — deklarerade i
supabase/config.toml, ingen manuell åtgärd behövs. Verifiera med
npm run verify:local-storage-buckets. Se
Gotcha #43.
Starta utvecklingsservern
npm run dev # Starta utvecklingsserver
Stoppa server: Ctrl + C
Demo-leverantör (för demo-läge): kör npm run db:seed:demo-provider (eller :reset) för att skapa Erik Järnfot — [email protected] / DemoProvider123! med 9 kunder, koordinater och en flerstopps-dag för Dagens rutt. Se docs/operations/demo-setup.md.
Se package.json för alla tillgängliga scripts. De vanligaste:
| Kommando | Beskrivning |
|---|---|
npm run dev | Utvecklingsserver (port 3000) |
npm run db:up | Starta lokal Supabase (DB + Auth + RLS) |
npm run db:down | Stoppa lokal Supabase (data bevaras) |
npm run db:nuke | Aterstall lokal databas (kor om migrationer) |
npm run db:status | Visa Supabase-status (portar, nycklar) |
npm run db:studio | Prisma Studio för databasinspektering |
npm run db:reset | Återställ databas (raderar all data!) |
npm run db:backup | Backup av Supabase-data (kräver Docker) |
npm run db:restore | Återställ backup till lokal databas |
npm run db:drift-check | Jämför lokala migrationer med Supabase (namnbaserad) |
npm run migrate:status | Fullständig migrationsstatus (pending, drift, misslyckade) |
npm test | Unit/integration tester (watch mode) |
npm run test:e2e | E2E-tester med Playwright |
npm run test:coverage | Coverage report |
npm run deploy | Kvalitetscheckar + drift-check + auto-backup + push |
npm run check:all | Alla quality gates i ett kommando (färgkodad output) |
npm run flags:validate | Validera feature flag gates (server + klient) |
Automatiserade quality gates säkerställer kodkvalitet:
Allt-i-ett: npm run check:all (typecheck + test + lint + swedish med färgkodad output)
Lokal Gate (Husky):
CI Gate (GitHub Actions, quality-gates.yml): körs på PR mot alla baser (inklusive stackade PR:er) och på push till main/staging.
type-check och lint kör utan postgres-service (de ansluter aldrig till en databas)Branch Protection: Kräver PR för merge till main, CI måste passera. Ingen force push tillåten.
equinet/
├── ios/ # iOS-app (Swift/SwiftUI, WKWebView hybrid)
├── prisma/ # Databasschema & migrationer
├── src/
│ ├── app/ # Next.js App Router
│ │ ├── (auth)/ # Login, registrering
│ │ ├── api/ # API routes (auth, bookings, horses, providers, ...)
│ │ ├── admin/ # Admin-sidor
│ │ ├── customer/ # Kundsidor
│ │ └── provider/ # Leverantörssidor
│ ├── components/ # React-komponenter (layout, provider, review, ui)
│ ├── domain/ # Affärslogik (booking, due-for-service, group-booking, notification, payment, reminder, subscription)
│ ├── infrastructure/ # Repositories (Prisma-implementationer)
│ ├── hooks/ # Custom hooks (useAuth, useNotifications)
│ ├── lib/ # Utilities (auth, email, prisma, rate-limit, validations)
│ └── types/ # TypeScript-typer
└── e2e/ # E2E-tester (Playwright)
Equinet använder DDD-Light - en pragmatisk approach till Domain-Driven Design.
src/
├── app/api/ # API Routes (HTTP-hantering)
├── domain/ # Affärslogik, entiteter, value objects
├── infrastructure/ # Repositories, externa tjänster
└── lib/ # Utilities utan affärslogik
Kärndomäner (Booking, Provider, Service, CustomerReview, Horse, Subscription) använder repository pattern:
Säkerhet: Alla auth-aware metoder använder atomära WHERE-klausuler för IDOR-prevention.
Se CLAUDE.md för fullständiga arkitekturriktlinjer.
43 modeller -- se prisma/schema.prisma för fullständig definition och docs/architecture/database.md för arkitekturbeskrivning.
Kärnmodeller:
smart_replies, default off)/provider/today) -- dagens bokningar som en rutt på karta, riktig körsträcka (OSRM), full adress och Navigera-länk per stoppappDidBecomeActive/appDidEnterBackground) via bridgeNEXT_PUBLIC_DEMO_MODE=true) -- strippar ner UI:t till kärnflödet för demo, se docs/demo-mode.mdSe docs/guides/feature-docs.md för detaljerade beskrivningar.
~4946 tester (~4612 Vitest unit/integration + 312 iOS XCTest + 22 E2E-specs) med 70% coverage.
# Unit/Integration (Vitest)
npm test # Watch mode
npm run test:ui # Visuellt interface
npm run test:coverage # Med coverage
# E2E (Playwright)
npm run db:up # Starta lokal Supabase (om inte redan igång)
npm run test:e2e:bootstrap # Verifiera Supabase + kör prisma migrate deploy
npm run test:e2e # Kör alla E2E-tester
npm run test:e2e:smoke # Smoke: app startar, login fungerar
npm run test:e2e:critical # Kritiska flöden: bokning, betalning, leverantör
npm run test:e2e:ui # Playwright UI (bäst för utveckling)
npm run test:e2e:offline # Offline PWA E2E-tester (bygger prod + testar offline-läge)
# Mobil viewport körs automatiskt som separat Playwright-projekt (Pixel 7, Chromium)
Testanvändare:
[email protected] / TestPassword123![email protected] / ProviderPass123!Se e2e/README.md och individuella .test.ts filer för detaljer.
Inför lansering: kör docs/testing/release-checklist.md -- täcker automatiska gates, kritiska flöden, feature-specifika flöden och pre-launch-blockerare.
Snabb guide:
lsof -ti:3000 | xargs kill -9
# eller
npm run dev -- -p 3001
npm run db:reset && npm run setup
npx prisma generate
# Starta om TS server i VS Code: Cmd+Shift+P -> "TypeScript: Restart TS Server"
# MaxClientsInSessionMode: Prisma Studio-processer stängs inte automatiskt
ps aux | grep prisma
pkill -f "prisma studio"
Tips: Stäng alltid Prisma Studio med Ctrl+C. Kontrollera med ps aux | grep prisma vid 503-fel.
rm -rf .next && npm run dev
Equinet är konfigurerat för Vercel (hosting) + Supabase (databas).
Kort sammanfattning:
prisma generate och next buildSe docs/operations/deployment.md för fullständig steg-för-steg guide.
Feature-backlog hanteras i Trello.
Skapad: November 2025 Version: v0.4.0+ Utvecklad med: Next.js 16, TypeScript, Tailwind CSS, Claude Code
npm run dev
Öppna http://localhost:3000 i din browser.
Verifiera installation
# Kör tester för att säkerställa allt fungerar
npm run test:run # Unit tests
npm run test:e2e # E2E tests (kräver seedat data)
npm run typecheck # TypeScript check