← Tilbage til The Vault
PoC⚡ AI-augmentedlive

ArchivePCB

KiCad-procesorkestering i browseren. Åbner schematics og PCB-layouts via KiCad-agent, committer hvert save til Gitea, kører AI readiness-checks (schematic, routing, QA), integrerer BOM mod parts_inventory og guider til JLCPCB fabrikationsordre.

#python#kicad#gitea#deepseek#fastapi
ArchivePCB

Selvinitieret, selvhostet projekt. Bygget og drevet af mig som arkitekt, product owner og reviewer, med AI som en overvåget "lærling" i udviklingsprocessen og i dele af selve produktet.

DEL 1: Resume

ArchivePCB styrer hele livet for et PCB-projekt fra en browser: skema og layout i KiCad, hvert gem versioneret i Gitea, styklister kontrolleret mod et rigtigt delelager, AI-støttede designtjek og fabrikationsfiler klar til bestilling. Brugeren behøver aldrig selv at håndtere KiCad-filer.

Tech stack

  • Backend: Python 3.11+, FastAPI/uvicorn, Pydantic v2, SSE (ca. 19.700 linjer Python plus en UI på 7.700 linjer)
  • Desktop-agent: en separat service på maskinen med KiCad installeret; styrer KiCad, overvåger gem (inotify), kører kicad-cli-eksport, KiCad IPC API
  • Versionsstyring og lagring: Gitea (ét repo pr. projekt, organisationer), versioneret filsystemarkiv, Syncthing-backup
  • Delelager: ODS-baseret lager, LCSC/JLCPCB- og TME-indkøb, QR-etiketter, mobil værkstedsgrænseflade
  • Viewere: KiCanvas, PDF.js
  • AI: DeepSeek — datablad-chat, skema-parathedstjek, PCB-QA-tjek, regionsbevidst indkøbschat
  • Integration: Archive3D (3D-printede loddepasta-stencils), PrusaSlicer headless, OctoPrint
  • Drift: systemd user services, install-/opdateringsscripts, TOML-konfiguration (dev/prod)

Største bedrift En komplet, guidet vej fra første skema til bestilt print, bygget omkring et værktøj (KiCad), der ikke er designet til at blive orkestreret. Versionsstyring, eksport, lagerreservationer, designtjek og fabrikationsfiler følger alle af én handling: brugeren åbner og lukker en session, og resten afledes.

DEL 2: Dybdegående baggrund

Problemet

Hardwareprojekter glider. KiCad-projekter ligger i lokale mapper uden anden historik end manuelle kopier. En stykliste eksporteres til et regneark, der er forældet en uge senere. Ingen husker, om delene til et print ligger i skuffen, er i restordre eller aldrig blev købt. Designreview er det, designeren husker at tjekke. Når et print skal rettes, er det gætværk at finde ud af, hvilke filer der gav hvilken fremstillet version. Prisen er spildte print, forkerte dele bestilt og omarbejde, som en grundlæggende proces ville have fanget.

Arkitektur og løsning

KiCad-desktop-pc                         Arkivserver
  kicad-agent  ── HTTP-callbacks ──▶      archive-pcb (FastAPI)
   åbner eeschema / pcbnew                 web-UI, mobil-UI, lager,
   overvåger gem, committer til Gitea      AI-chats, fabrikation
   kører kicad-cli-eksport                       │
                                            Gitea (sandhedskilde) + Syncthing-backup

Designvalg, der er værd at fremhæve

  • Agent ved siden af GUI'en, server ved siden af data. KiCad kræver et skrivebord; arkivet gør ikke. Agenten åbner editorer, debouncer filændringer (tre sekunder) og committer hvert gem; serveren ejer arkiv, lager og AI. Samme opdeling bruges på tværs af mine andre projekter.
  • Alt afledes af sessionen. Ved lukning kører agenten eksportpakken: stykliste, skema-SVG/PDF, PCB-PDF, Gerbers, placeringsfil (CPL), ERC- og DRC-rapporter. Version 1 oprettes automatisk.
  • Ærlig brug af et umodent API. Jeg testede KiCad 10's IPC-API live og dokumenterede, hvad der faktisk virker (ping, gem, afslut), og hvad der ikke gør (opdatér PCB fra skema, eksportjobs, headless), med en tabel over, hvad KiCad 11 bør muliggøre. Koden bruger kun det bekræftede og falder tilbage til kicad-cli, inotify og vinduesautomatisering for resten.
  • Nedbrudshåndtering som funktion. En ping-monitor genstarter KiCad, hvis det lukker uventet, mens et projekt er aktivt, og genaktivering genforbinder til en kørende instans i stedet for at starte en anden.
  • Fabrikationsregler anvendes automatisk. Ved aktivering finder agenten lagantallet og installerer de matchende JLCPCB-designregler, så KiCad tjekker mod den rigtige producent.
  • Lager med en eksplicit tankemodel. Beholdning, reserveret og disponibelt er adskilt; en indkøbsliste er en afledt visning, der tager højde for minimumsbeholdning og leverandørers minimumsordremængder. At bygge et projekt forbruger lager og rydder reservationer.
  • Flere leverandører. LCSC/JLCPCB og TME (EU) håndteres side om side, med en regionsbevidst AI-indkøbschat.
  • Integration på tværs af projekter. Loddepasta-stencils genereres her og renderes, slices og printes via Archive3D og en dedikeret printer.
  • Testdækning. Der er ingen automatisk testsuite i repoet; adfærd er verificeret mod rigtige KiCad-sessioner og rigtige bestillinger. At tilføje tests omkring stykliste-parsing, lageraritmetik og agentens callbacks er det første, jeg ville gøre i et team.

AI som lærling

AI i selve produktet. DeepSeek bruges til fire afgrænsede opgaver: en datablad-chat forankret i den udtrukne PDF-tekst; et skema-parathedstjek (ti tjek, cachet pr. version); et PCB-QA-tjek efter routing; og en indkøbschat, der ved, om brugeren handler hos LCSC eller TME. Tjekkene giver fund, som designeren handler på; de ændrer ikke designet.

AI i udviklingsprocessen (human-in-the-loop). Jeg ejer krav, arkitektur og verifikation; en AI-kodeassistent implementerer mod en detaljeret funktionel specifikation og en CLAUDE.md. En dokumentationsstil med "kendte mangler" og "fund" holder det, der ikke virker, synligt, så assistenten ikke bygger på falske antagelser. Alt, der rører rigtig hardware, bestillinger eller den levende KiCad-session, verificerer jeg selv.

Lederens refleksion

  1. Pak værktøjet ind, erstat det ikke. At gøre KiCad til motoren og browseren til proceslaget gav det meste af værdien for en brøkdel af indsatsen ved at genopbygge et EDA-værktøj.
  2. Test platformens reelle evner, før du designer omkring dem. Et kort live-eksperiment sparede mig for at bygge på et API, der ikke kunne det, dokumentationen antydede.
  3. Afledte data slår indtastede data. Eksport, statusmærker og indkøbslister beregnes fra sandhedskilden, så de ikke kan blive forældede.
  4. Kvalitetsporte skal være billige og tidlige. AI-støttede parathedstjek før routing og før bestilling fanger dyre fejl, mens de stadig er billige at rette.
  5. Planlæg for en køreplan, du ikke styrer. Koden bruger det, der virker i dag, og dokumenterer, hvad en fremtidig KiCad-udgave åbner for.

Ærlige begrænsninger. Single-user og selvhostet, ingen automatiske tests, ingen CI, og ét stort API-modul og én stor UI-fil, der ville have gavn af at blive delt op. Bygget mellem maj og oktober 2026.