← Commit history
README.md+4−70
@@ -50,78 +50,12 @@ The finer 0.1 mm thermal screen for the final copper candidate found regional ri  ## Package contents -Open `fan-controller.kicad_pro` in KiCad 9 or 10. The project carries its symbols, footprints and models. `manufacturing/` contains the native checked files and JLC-formatted BOM/CPL. `docs/fan-controller-development.pdf` is the three-page review document. `docs/field-issues-review.md` records unresolved advisory findings. `firmware/` contains the ESPHome configuration and control-policy source; supply your own private credentials.--[Download the complete development project](downloads/fan-controller-development.zip) · [Read the development datasheet](docs/fan-controller-development.pdf)+Open `fan-controller.kicad_pro` in KiCad 10. Version 0.1.1 is the native KiCad 10 save; the earlier 0.1.0 archive retains the KiCad 9 file. The project carries its symbols, footprints and models. `manufacturing/` contains the native checked files and JLC-formatted BOM/CPL. `docs/fan-controller-development.pdf` is the three-page review document. `docs/field-issues-review.md` records unresolved advisory findings. `firmware/` contains the ESPHome configuration and control-policy source; supply your own private credentials.  ## Design review -![Complete board assembly exported by native KiCad](screenshots/assembly.png)-Native STEP assembly, with J5 intentionally unpopulated. Some models are simplified package envelopes; see the provenance register.--![Native top copper and silkscreen](screenshots/layout.png)-The saved routed board, including four mounting holes and the locating-tab relief.--![PCB outline over the source enclosure geometry](screenshots/fit.png)-Nominal CAD fit. Connector mating, cables and printed tolerances still require a physical check.--![Calculated temperature rise across the final copper](screenshots/thermal.png)-Fine-grid still-air board-temperature screen with explicit loads and assumptions; not measured performance.--![Connector pin assignments and local control behavior](screenshots/interfaces.png)-The project-authored development datasheet describes wiring, programming and fault responses.--<!-- aiflow:steps -->-## How this board was built--Every step of the build, in order, each with its own page of evidence (checks, screenshots, the AI's drawings and usage), written by [adom-aiflow](https://wiki.adom.inc/adom/adom-aiflow) as the run went.--**1. Intake**: read the prompt and the requirements. [The evidence](steps/01-intake/README.md)--**2. Design rules**: choose the fab, load its design rules. [The evidence](steps/02-rules/README.md)--**3. Circuit design**: datasheet math and part values. [The evidence](steps/03-design/README.md)--**4. Test plan**: what to measure on the workcell, a probe spot for each. [The evidence](steps/04-test-plan/README.md)--**5. Sourcing**: every part in stock, with an MPN. [The evidence](steps/05-sourcing/README.md)--**6. Parts on the wiki**: every part's wiki page, shown as it is picked. [The evidence](steps/06-parts/README.md)--**7. Project page**: README rev 1, component table, KiCad PCM repo. [The evidence](steps/07-project-page/README.md)--**8. Library**: symbols, footprints and 3D from the wiki. [The evidence](steps/08-library/README.md)--**9. Schematic**: drawn live, checked against the netlist. [The evidence](steps/09-schematic/README.md)--**10. SPICE simulation**: the drawn schematic in SPICE: start-up, ripple, load step. [The evidence](steps/10-simulation/README.md)--**11. Components**: wiki component identity and CAD audit. [The evidence](steps/11-components/README.md)--**12. 3D models**: every 3D model bound and upright. [The evidence](steps/12-models/README.md)--**13. Placement**: parts placed for current and heat. [The evidence](steps/13-placement/README.md)--**14. Routing**: every trace routed, DRC clean. [The evidence](steps/14-routing/README.md)--**15. Heatsink vias**: via arrays under the hot parts. [The evidence](steps/15-thermal-vias/README.md)--**16. Copper pours**: copper pours and stitching. [The evidence](steps/16-pours/README.md)--**17. Rounded corners**: sharp board corners rounded. [The evidence](steps/17-outline/README.md)--**18. Current**: current density on every loaded net. [The evidence](steps/18-current/README.md)--**19. Thermal**: temperature rise against the budget. [The evidence](steps/19-thermal/README.md)--**20. Fields**: current and heat solved in 3D. [The evidence](steps/20-fields/README.md)--**21. Pour walkthrough**: each pour net lit in turn. [The evidence](steps/21-nets/README.md)--**22. Silkscreen**: labels, polarity, pinouts, both faces. [The evidence](steps/22-silkscreen/README.md)--**23. 3D board**: the finished board in 3D. [The evidence](steps/23-3d/README.md)+This 42-second silent review shows the assembled model, nominal enclosure fit, calculated current and heat flow, thermal assumptions, and underside labels. It is a review of the completed development design, not a recording of assembly or physical testing. -**24. Finish line**: 0 unconnected, 0 errors, every check passed. [The evidence](steps/24-finish/README.md)+::adom-video{src="/matt/fan-controller/render/videos/review.video.json"} -<!-- /aiflow:steps -->+[Download the review video](/matt/fan-controller/render/videos/fan-controller-review.mp4) · [Download the complete development package](/matt/fan-controller/render/downloads/fan-controller-development.zip)
docs/fan-controller-development.pdf+5−5
@@ -72,7 +72,7 @@ endobj endobj 10 0 obj <<-/Author (\(anonymous\)) /CreationDate (D:20261023105502-07'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20261023105502-07'00') /Producer (ReportLab PDF Library - \(opensource\)) +/Author (\(anonymous\)) /CreationDate (D:20261023115628-07'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20261023115628-07'00') /Producer (ReportLab PDF Library - \(opensource\))    /Subject (\(unspecified\)) /Title (\(anonymous\)) /Trapped /False >> endobj@@ -97,10 +97,10 @@ Gat=+9lo;b'#"%CaNI%tArJ8IM3%<9gUKK!"pS1Q%Wa(p!`rT(WCmj4)uJ[iAP&V52^Ysl*!Sj3W\Wo% endobj 14 0 obj <<-/Filter [ /ASCII85Decode /FlateDecode ] /Length 1706+/Filter [ /ASCII85Decode /FlateDecode ] /Length 1704 >> stream-Gat%b?#SIU'Sc)J/'_]a`3MT)fjYbS@ftQ8,]er^fGu882HrdQ8BQd?rV4&O*S51gCdim,VG*SBpN[:?:lN0-s"A,]RhbT4#ph%&.S9omJ6$kN?X<$M-Z42JNV9F#0M\L?KYDlbCUYJ?T05^o`Aoe]<ikO#Wj,`!aYb[GQEKHo\t/jU^O(5'358ftO7")j[%-$uY<U9MC%8F'`V%LH_sD^BiSjb`>(*9uchiZ-!t5EuBK/+Bac=+.FE,B26K@SM7:IkBCSt=TjEL>7.4)^P1j)eFaWqd`VKfa'l#Is6'icg:U0q$#L0.C&Q>9@b(LBK':A,inhskoZb\6(#3E[@m6Q2Wl5074Qd`dGu]f[,0L!oX$.Z[%J)il@lSsOhh:Z>6fq&gX;j(_DU=d9eFX1jX^%4?(ZT1qZN:d=[=qt_u7<@o+9af%rN]JmI:--`oN5JNsQb,DJBOIU%9'V)8!R]RNH.9FN.F%*0I[<`EBZWup3(eoa&LM!BuOYtU'dC<J*_d>KL=g42qfr_H*F.(56Ku,au2'joTkcF&cLb"q%gJ.T7)!a@Vjcj_b/>mlNdcrlf'u".%M``ShJnZgHrYeWWq:8Hu=lU$>SD><gQC+M`Ii1cE#bMM,DRlGtRei:SD)qQ`:sLSf\_i7=%+e]oJ4EM%W.[#jU'3WOETr?JCC6A#NkJ/D%kS+p=XuJL2:I6L)p=_*\RPtQo>[O#2+,j(-=Fm;kQpo=RO?uiL=J-VImt9"&1/HO`=_fpJ2[SNP;@bgYl*Me/q>!(gU<IeP3obK_sF]R[#Ae@k1Z"2HAuQWPWF6.Xf/iV5-J:LI=8C9N(P[tFAElc7nC.'4f`nA>XM\V$EBX@8JE6gTm=U7p[Ibj)ptE]XYPF6'O:4GU1L]D/^snH0!RV>:W&+6nt9;BNoIl3bn=2Ce)a7\Q-_Bg#\,cQq,"fK^fXWbkurBKG!j%$bs6(*AgnF6r&';12#Jgrmd'taP_;p#cL3q@8Qi6oGtfIUTq*Do1+R0reh[$1cJdS;B`8@Ndc'gWkt;9AEtBVW+/a%k'r>iTX!)`'g#WN#IQ)Z#V@jEbUlo8,Nl5@RN^p"sfXK!tPpUah!_&2"=%nsf@>7t;\WVCT1KMqgk0$p-Fuf0YVj!^AOf$d(%LYO*0+Xo_,_(!15VZ.&J<[<I%NGr!T[NbeA!Zh#)<IENV2lCh*!j>jJ2&`cAC8M,fE.g?,:R<'8jq1'D']V<.#[u'.?u]V^R0@G@IeuS>Y)noqDp"/W,:/_34`_-?Z]I5P)^^id!:8[c939u;fdtAO"5]o;44X*e#YCp?!TP,",S#WI.!H?S^k'Z7`NYq*]P"i3NEAnnA_T$W#lUF@lfHg2SAfoqDMm;$fFLH%Jg'JpX]TD5.Yd';O"[0Y,LJpo*o2-e7.m22ec'nF0g&f-LBnCSg,d-B3FAn^'ThKQm^,IGN=]j7C<56kigm$ph>G*f(au8bhfbcY7?oXL5Y`E\qY"U]Y+XZq!0EbKYHA`+(:=a](`,,q1d>XT-*s!)fGPTHH%;LT/pZE8'LPoA!fte)D/*/FE#V-0NFZc<5Ad]X6Fla&"0(=*>EW\Y*r;G9HPoc@]X>lj<!(fX2A//"LHniZiopk@1&<+@GT&50IC2lDpo`@o$du*8#!hJmsGMH7!,WHhTq[^!E4#W5Elgdm7/51]lgeBDk*4<9`6%ln2LnSd)Ebn?>/0~>endstream+Gat%b>Ar7S'Z],&.F)E]`3M#0[b*t,fKco&a]r<pp-qW<c'AtWP&b#>++A^&[d1:i[_dPJUr[WQs3<W".)me-mmTrmZ_IFCTd6I77EHYjd-?YRX,HrQ`%=c[d=*qk`lW=ed'oWnm1(E=]*Bd]\>Q4IMD`(62-)4V\Y^\1dP^tj\+;iHG7T`VkP$LldJ^t?QLh`aor%U;/KU4b\@u*pQsHmZ4P]s)X3\0LH10.s^i1uaL;TdOm,Y.DMk_(%)NUd%&o4aZHgPB<rcEXP;W>Sf;\s#.9VT@:MX=D8QO@6*W+*:Q"g^NQ`0ujt>`3@3E%p*pFUjH0Nn8&Z7O.*?X4;2HU]GN)SK,Ycc"oAlbB)'<-sckLnn=8nnT^5[H-&SP,T[\j&$eJbXp.mo<I$m>l?eHBE:R')fd+KHojb2>O8ncWeY6K8N9YN$HaE$BdX3S?o/hi)N9Zi=adHa8_9"1,ft-..Eb,Y<=2`fnWu"VhbN4b=d:DH9BN>IF=Ym`,NB:]1r/eJ4K!j+NDLLW1bFCLE'TT/q.="KRB2rSs?.#b0C#Ue_=SG04VhA8c3TW>U<n@qcn;-$Tr3Vt$VR>@YX$m3T>>&gGNPFh"Fp"pO@[@#mAK862]JD7OjbD2sl;r#6jn*=T3Nn\0rZnX%>]8R%[\P;`$#=cR$[+qudKPEU'J,RjB:BMu=p,JN<i?Fn9G>9]/8lHhXsnV?)iNe/$q]cRJ/p;<'AUoISpX$G<n$.0'uIb=0_$8::9Y63]P0?sS2$OcjW@!3!VDK,[RJN(Cr\CGAtKe]AR%;Tf:Iq_C[B#;lLY+dU@(eO]K-UNf\$U$V%ut?*J`8R'$a\,WZEhFO;=XDC8XT8`MZdN??+4Qr;=N'oVbcj$m7,*Qb9On)6I$L2*m%>XH3*ipi'O\ea(1O4IE!K6E=b1S>i@u\u#gHbf2@Z_KR%<bDIrY9@(Imkh!EaBT67MKd)Pl#$.!Y]ulMMnc2oeU/:4%T0=Di=g+\_\.F#9Xs-.e.r:!j1=U<7UNYCbq#PZ8_sMBjQO_$u+@sL::>^FL8tT]36`:#e/l2!,]B4IkQ$@8fPpC^_,nAtA4M#.QKG(Hg&(J]9dj8juU"1Nk4Db$EAdn'V3U>QTBAW<'dW>B7'H=tu!CuIP6&1!GcOLSd-&N^^1A7ZjV*!sAR=BP,dbZOM]G%UCej=G1n7W*+#P8a6F>D?[JI\O8'VnVQN+p\J&p;PLMm:fsb12cLa$$EKn:4Ol,lBY@FsMWfgU5muY*nVmS^n:D'2*mphOpK^cNPNBS7CARb$S<T,qQV`/'WDWb0HW0,=b\)];BOkodm<*0sdG6%/&onWX&4e`N?fd4X/C5kp5';nD]AjgYcWrn/?^5a9.O[:C1EW1231TPaD_X<-,DA"t_9=YqM1t+]#Cb/U%%=j6%APCB<rbb;*F[2keSTg'BM4*BF,$W-3\#);UW,r_Xi024ecDfbZ16X2>A$E3\8%QZ.q8gT-utT2K(tqLHI#63@C1mpC8?T29k3o4)-K_em.gcT#J1;[4n%B3@EI$nVcX,K1CM%aH!FV5f`>.e'XSRZ>F:D[D<L;,R([lK`ii]U:rIUdR/n9ZTB,_,c>pW"67W,ENPje&UTPG(k&tf><o*V&uEn4S$u.N@iOcbe(GTX[I97^5h="c@@>].aNY^WnMYXeFqH&CYlR1JhZkI%,PtDTV.3m!G[*soD~>endstream endobj xref 0 15@@ -122,7 +122,7 @@ xref trailer << /ID -[<c69f03221e091721ae477044678e7f75><c69f03221e091721ae477044678e7f75>]+[<09fa56359c774ef18643c93471def2fb><09fa56359c774ef18643c93471def2fb>] % ReportLab generated PDF document -- digest (opensource)  /Info 10 0 R@@ -130,5 +130,5 @@ trailer /Size 15 >> startxref-174065+174063 %%EOF
downloads/fan-controller-development.zip
⋯ 1 unchanged line ⋯
package.json+1−1
@@ -3,7 +3,7 @@   "type": "component",   "title": "Network cabinet fan-controller",   "brief": "Development PCB for two network-cabinet fans: local temperature control, independent PWM and RPM monitoring, and a nominal fit in the existing round enclosure.",-  "version": "0.1.0",+  "version": "0.1.1",   "visibility": "private",   "kind": "board",   "source": "kicad",
page.json+17−4
@@ -4,20 +4,25 @@   "type": "component",   "title": "Network cabinet fan-controller",   "brief": "Development PCB for two network-cabinet fans: local temperature control, independent PWM and RPM monitoring, and a nominal fit in the existing round enclosure.",-  "version": "0.1.0",+  "version": "0.1.1",   "visibility": "private",   "kind": "board",   "source": "kicad",   "hero": {     "type": "billboard",     "headline": "Network cabinet fan-controller",-    "subhead": "Rev A development \u2022 dual PWM \u2022 temperature and RPM monitoring"+    "subhead": "Rev A development • dual PWM • temperature and RPM monitoring"   },   "author": {     "name": "matt",     "email": "[email protected]"   },-  "tags": [],+  "tags": [+    "pcb",+    "fan-controller",+    "kicad",+    "network-cabinet"+  ],   "license": "proprietary",   "sample_prompts": [],   "discovery_triggers": [],@@ -44,5 +49,13 @@     "readme",     "viewers",     "files"-  ]+  ],+  "description": "Development PCB for two network-cabinet fans: local temperature control, independent PWM and RPM monitoring, and a nominal fit in the existing round enclosure.",+  "files": [+    "README.md",+    "docs/",+    "models/",+    "downloads/"+  ],+  "dependencies": {} }\ No newline at end of file