0hmX/robocraze-ov7670-camera-module-clone
This code defines and generates a 4-layer PCB hardware layout featuring an OV7670 VGA camera sensor module with fixed component placement, power regulation using ME6211 voltage regulators, a 2x9 header interface, and associated signal routing and mechanical footprints, designed for manufacturing and assembly.
- Version
- 1.0.7
- License
- MIT
- Stars
- 0
scripts/prepare-jlc-artifacts.ts
type SourceComponent = {
type: "source_component"
source_component_id: string
name: string
ftype: string
manufacturer_part_number?: string
supplier_part_numbers?: { jlcpcb?: string[] }
display_capacitance?: string
display_resistance?: string
display_name?: string
}
type PcbComponent = {
type: "pcb_component"
source_component_id: string
center: { x: number; y: number }
layer: "top" | "bottom"
rotation: number
do_not_place: boolean
}
type CircuitElement = SourceComponent | PcbComponent | { type: string }
const projectDir = new URL("../", import.meta.url).pathname
const outputDir = `${projectDir}dist/index`
const circuitJsonPath = `${outputDir}/circuit.json`
const gerberArchivePath = `${outputDir}/robocraze-ov7670-gerbers.zip`
const elements = (await Bun.file(circuitJsonPath).json()) as CircuitElement[]
const sourceComponents = elements.filter(
(element): element is SourceComponent => element.type === "source_component",
)
const pcbComponents = elements.filter(
(element): element is PcbComponent => element.type === "pcb_component",
)
const pcbBySourceId = new Map(
pcbComponents.map((component) => [component.source_component_id, component]),
)
const manualAssembly = new Set(["J1", "U3"])
const dnp = new Set(["R0", "D0_IND"])
const footprintFor = (component: SourceComponent) => {
if (component.name === "U1") return "SOT-23-5_LCSC_C53099"
if (component.name === "U2") return "SOT-23-5_LCSC_C236671"
if (component.name === "J1") return "2x9_P2.54mm_THT_LCSC_C492426"
if (component.name === "U3") return "OV7670_CSP2_24B_LENS_ASSEMBLY"
if (component.ftype === "simple_capacitor") return "C0603"
if (component.ftype === "simple_resistor") return "R0603"
if (component.ftype === "simple_led") return "LED0603"
return component.ftype
}
const commentFor = (component: SourceComponent) =>
[
component.display_capacitance ?? component.display_resistance,
component.manufacturer_part_number ?? component.display_name,
]
.filter(Boolean)
.join(" / ")
const csvCell = (value: string | number) => {
const text = String(value)
return /[",\n]/.test(text) ? `"${text.replaceAll('"', '""')}"` : text
}
const toCsv = (rows: Array<Array<string | number>>) =>
`${rows.map((row) => row.map(csvCell).join(",")).join("\n")}\n`
const smtParts = sourceComponents
.filter((source) => !manualAssembly.has(source.name) && !dnp.has(source.name))
.filter((source) => source.supplier_part_numbers?.jlcpcb?.[0])
.filter((source) => !pcbBySourceId.get(source.source_component_id)?.do_not_place)
.sort((a, b) => a.name.localeCompare(b.name, undefined, { numeric: true }))
const bomRows: Array<Array<string | number>> = [
["Comment", "Designator", "Footprint", "JLCPCB Part #"],
]
const cplRows: Array<Array<string | number>> = [
["Designator", "Mid X", "Mid Y", "Layer", "Rotation"],
]
for (const source of smtParts) {
const pcb = pcbBySourceId.get(source.source_component_id)
if (!pcb) throw new Error(`Missing PCB placement for ${source.name}`)
bomRows.push([
commentFor(source),
source.name,
footprintFor(source),
source.supplier_part_numbers!.jlcpcb![0],
])
cplRows.push([
source.name,
pcb.center.x.toFixed(3),
pcb.center.y.toFixed(3),
pcb.layer === "top" ? "Top" : "Bottom",
pcb.rotation.toFixed(0),
])
}
const manualRows: Array<Array<string | number>> = [
["Designator", "Status", "Comment", "Footprint", "JLCPCB Part #"],
]
for (const source of sourceComponents
.filter((component) => manualAssembly.has(component.name))
.sort((a, b) => a.name.localeCompare(b.name, undefined, { numeric: true }))) {
const status = source.name === "J1"
? "Manual/rear-side THT"
: "Customer-supplied/consigned CSP sensor"
manualRows.push([
source.name,
status,
commentFor(source),
footprintFor(source),
source.supplier_part_numbers?.jlcpcb?.[0] ?? "",
])
}
manualRows.push([
"U3-OPTICS",
"Customer-supplied/consigned optical assembly",
"Qualified 1/6-inch lens and holder matched to OV7670; install and align after sensor assembly",
"MECHANICAL_OPTICAL_ASSEMBLY",
"",
])
const dnpRows: Array<Array<string | number>> = [
["Designator", "Status", "Comment", "Footprint", "JLCPCB Part #"],
]
for (const source of sourceComponents
.filter((component) => dnp.has(component.name))
.sort((a, b) => a.name.localeCompare(b.name, undefined, { numeric: true }))) {
dnpRows.push([
source.name,
"DNP",
commentFor(source),
footprintFor(source),
source.supplier_part_numbers?.jlcpcb?.[0] ?? "",
])
}
const bomCsv = toCsv(bomRows)
const cplCsv = toCsv(cplRows)
const manualCsv = toCsv(manualRows)
const dnpCsv = toCsv(dnpRows)
const notes = `JLC SMT assembly files for the Robocraze OV7670 module clone.
- Upload jlc_bom.csv and jlc_cpl.csv together; their designator sets match.
- J1 is exact LCSC C492426, but is a rear-side through-hole operation and is intentionally excluded from the SMT CPL.
- U3 (OV7670-VL2A) and U3-OPTICS are customer-supplied/consigned and require a qualified CSP, lens-holder, and optical-alignment process.
- R0 and D0_IND are intentional DNPs listed separately in dnp.csv.
`
await Bun.write(`${outputDir}/jlc_bom.csv`, bomCsv)
await Bun.write(`${outputDir}/jlc_cpl.csv`, cplCsv)
await Bun.write(`${outputDir}/manual_assembly.csv`, manualCsv)
await Bun.write(`${outputDir}/dnp.csv`, dnpCsv)
await Bun.write(`${outputDir}/assembly_notes.txt`, notes)
const archiveFilesDir = `${outputDir}/.jlc-archive-files`
await Bun.write(`${archiveFilesDir}/bom.csv`, bomCsv)
await Bun.write(`${archiveFilesDir}/pick_and_place.csv`, cplCsv)
await Bun.write(`${archiveFilesDir}/manual_assembly.csv`, manualCsv)
await Bun.write(`${archiveFilesDir}/dnp.csv`, dnpCsv)
await Bun.write(`${archiveFilesDir}/assembly_notes.txt`, notes)
if (await Bun.file(gerberArchivePath).exists()) {
await Bun.
scripts/prepare-jlc-artifacts.ts - 0hmX/robocraze-ov7670-camera-module-clone - tscircuit
scripts/prepare-jlc-artifacts.ts - 0hmX/robocraze-ov7670-camera-module-clone - tscircuit
zip -d ${gerberArchivePath} bom.csv pick_and_place.csv`.quiet().nothrow()\n await Bun.
scripts/prepare-jlc-artifacts.ts - 0hmX/robocraze-ov7670-camera-module-clone - tscircuit
zip -j ${gerberArchivePath} ${archiveFilesDir}/bom.csv ${archiveFilesDir}/pick_and_place.csv ${archiveFilesDir}/manual_assembly.csv ${archiveFilesDir}/dnp.csv ${archiveFilesDir}/assembly_notes.txt`.quiet()\n}\n\nconsole.log(`Prepared ${smtParts.length} JLC SMT placements, ${manualRows.length - 1} manual/consigned items, and ${dnpRows.length - 1} DNPs.`)\n","content_mimetype":"text/typescript","created_at":"2026-08-24T13:23:42.504Z"}; window.SSR_PACKAGE_RELEASES = [{"package_release_id":"b165339e-f482-4d8c-9803-33fb4333a2b6","package_id":"664d9097-5b33-4886-9c4c-127597354ec8","version":"1.0.7","github_commit_sha":null,"is_locked":false,"is_latest":true,"ready_to_build":true,"is_pr_preview":false,"created_at":"2026-08-24T13:23:41.618Z","circuit_json_build_error":null,"circuit_json_build_error_last_updated_at":null,"has_transpiled":false,"transpilation_error":null,"transpilation_logs":null,"transpilation_in_progress":false,"transpilation_started_at":null,"transpilation_completed_at":null,"transpilation_is_stale":true,"transpilation_display_status":"pending","fs_sha":"md5-e4247102fc0198eef628891988afe5cd","circuit_json_build_logs":null,"circuit_json_build_in_progress":false,"circuit_json_build_started_at":null,"circuit_json_build_completed_at":null,"circuit_json_build_is_stale":true,"circuit_json_build_display_status":"pending","image_generation_error":null,"image_generation_error_last_updated_at":null,"image_generation_logs":null,"image_generation_in_progress":false,"image_generation_started_at":null,"image_generation_completed_at":null,"image_generation_is_stale":true,"image_generation_display_status":"pending","pcb_preview_image_url":null,"sch_preview_image_url":null,"cad_preview_image_url":"https://api.tscircuit.com/package_files/view?package_release_id=b165339e-f482-4d8c-9803-33fb4333a2b6\u0026file_path=dist%2Findex%2F3d.png","package_release_website_url":null,"display_status":"pending","latest_package_build_id":"f2715047-0158-4258-88d6-1a58ee4150c6","user_code_job_started_at":"2026-08-24T13:23:44.508Z","user_code_job_completed_at":"2026-08-24T13:25:35.736Z","user_code_job_error":null,"user_code_job_completed_logs":null,"user_code_job_log_stream_url":"https://usercode.tscircuit.com/user_code_jobs/view_log_stream?user_code_job_id=08a1e392f8de01ebaa77e50228e22d61099362826a7f93bfb39491c8dcafe51a","ai_review_requested":false,"github_pr_number":null,"github_pr_title":null,"github_branch_name":null},{"package_release_id":"99c5f93b-edfc-4cac-a582-ec8988f59d85","package_id":"664d9097-5b33-4886-9c4c-127597354ec8","version":"1.0.6","github_commit_sha":null,"is_locked":false,"is_latest":false,"ready_to_build":true,"is_pr_preview":false,"created_at":"2026-08-24T12:16:13.016Z","circuit_json_build_error":null,"circuit_json_build_error_last_updated_at":null,"has_transpiled":false,"transpilation_error":null,"transpilation_logs":null,"transpilation_in_progress":false,"transpilation_started_at":null,"transpilation_completed_at":null,"transpilation_is_stale":false,"transpilation_display_status":"pending","fs_sha":"md5-14b3010608ac46b7c76ddb0bdf1c2769","circuit_json_build_logs":null,"circuit_json_build_in_progress":false,"circuit_json_build_started_at":null,"circuit_json_build_completed_at":null,"circuit_json_build_is_stale":false,"circuit_json_build_display_status":"pending","image_generation_error":null,"image_generation_error_last_updated_at":null,"image_generation_logs":null,"image_generation_in_progress":false,"image_generation_started_at":null,"image_generation_completed_at":null,"image_generation_is_stale":false,"image_generation_display_status":"pending","pcb_preview_image_url":null,"sch_preview_image_url":null,"cad_preview_image_url":"https://api.tscircuit.com/package_files/view?package_release_id=99c5f93b-edfc-4cac-a582-ec8988f59d85\u0026file_path=dist%2Findex%2F3d.png","package_release_website_url":null,"display_status":"pending","latest_package_build_id":"15e59836-d9a1-484a-9d3c-027d94bbfaa5","user_code_job_started_at":"2026-08-24T12:16:34.107Z","user_code_job_completed_at":"2026-08-24T12:18:35.336Z","user_code_job_error":null,"user_code_job_completed_logs":null,"user_code_job_log_stream_url":"https://usercode.tscircuit.com/user_code_jobs/view_log_stream?user_code_job_id=0e62e5ec538c8f68c53b99737a0fafceab877a619b69683629cae5f694cb1912","ai_review_requested":false,"github_pr_number":null,"github_pr_title":null,"github_branch_name":null},{"package_release_id":"e5912aea-226c-4f88-8c9c-72c31b06fd28","package_id":"664d9097-5b33-4886-9c4c-127597354ec8","version":"1.0.5","github_commit_sha":null,"is_locked":false,"is_latest":false,"ready_to_build":true,"is_pr_preview":false,"created_at":"2026-08-20T14:13:29.867Z","circuit_json_build_error":null,"circuit_json_build_error_last_updated_at":null,"has_transpiled":false,"transpilation_error":null,"transpilation_logs":null,"transpilation_in_progress":false,"transpilation_started_at":null,"transpilation_completed_at":null,"transpilation_is_stale":false,"transpilation_display_status":"pending","fs_sha":"md5-e28760f00ede8a7b77c3bc349d506a19","circuit_json_build_logs":null,"circuit_json_build_in_progress":false,"circuit_json_build_started_at":null,"circuit_json_build_completed_at":null,"circuit_json_build_is_stale":false,"circuit_json_build_display_status":"pending","image_generation_error":null,"image_generation_error_last_updated_at":null,"image_generation_logs":null,"image_generation_in_progress":false,"image_generation_started_at":null,"image_generation_completed_at":null,"image_generation_is_stale":false,"image_generation_display_status":"pending","pcb_preview_image_url":null,"sch_preview_image_url":null,"cad_preview_image_url":"https://api.tscircuit.com/package_files/view?package_release_id=e5912aea-226c-4f88-8c9c-72c31b06fd28\u0026file_path=dist%2Findex%2F3d.png","package_release_website_url":null,"display_status":"pending","latest_package_build_id":"22dc075e-a7b9-4418-b244-6b9a75f6bac4","user_code_job_started_at":"2026-08-20T14:13:43.035Z","user_code_job_completed_at":"2026-08-20T14:15:02.833Z","user_code_job_error":null,"user_code_job_completed_logs":null,"user_code_job_log_stream_url":"https://usercode.tscircuit.com/user_code_jobs/view_log_stream?user_code_job_id=a19e6bb13decec7243bdae99f42bd560e87b2aa513253d9249ca153e39baa48f","ai_review_requested":false,"github_pr_number":null,"github_pr_title":null,"github_branch_name":null},{"package_release_id":"adaf2e95-a0ac-4720-936b-6ac03722ca3f","package_id":"664d9097-5b33-4886-9c4c-127597354ec8","version":"1.0.4","github_commit_sha":null,"is_locked":false,"is_latest":false,"ready_to_build":true,"is_pr_preview":false,"created_at":"2026-08-19T00:39:14.298Z","circuit_json_build_error":null,"circuit_json_build_error_last_updated_at":null,"has_transpiled":false,"transpilation_error":null,"transpilation_logs":null,"transpilation_in_progress":false,"transpilation_started_at":null,"transpilation_completed_at":null,"transpilation_is_stale":false,"transpilation_display_status":"pending","fs_sha":"md5-994de436614f12537d7cfbb1e3cede9d","circuit_json_build_logs":null,"circuit_json_build_in_progress":false,"circuit_json_build_started_at":null,"circuit_json_build_completed_at":null,"circuit_json_build_is_stale":false,"circuit_json_build_display_status":"pending","image_generation_error":null,"image_generation_error_last_updated_at":null,"image_generation_logs":null,"image_generation_in_progress":false,"image_generation_started_at":null,"image_generation_completed_at":null,"image_generation_is_stale":false,"image_generation_display_status":"pending","pcb_preview_image_url":"https://api.tscircuit.com/package_files/view?package_release_id=adaf2e95-a0ac-4720-936b-6ac03722ca3f\u0026file_path=dist%2Findex%2Fpcb.svg","sch_preview_image_url":"https://api.tscircuit.com/package_files/view?package_release_id=adaf2e95-a0ac-4720-936b-6ac03722ca3f\u0026file_path=dist%2Findex%2Fschematic.svg","cad_preview_image_url":"https://api.tscircuit.com/package_files/view?package_release_id=adaf2e95-a0ac-4720-936b-6ac03722ca3f\u0026file_path=dist%2Findex%2F3d.png","package_release_website_url":null,"display_status":"pending","latest_package_build_id":"8527b33b-ded7-40db-a351-f683a91f962f","user_code_job_started_at":"2026-08-19T00:39:26.978Z","user_code_job_completed_at":"2026-08-19T00:40:43.859Z","user_code_job_error":null,"user_code_job_completed_logs":null,"user_code_job_log_stream_url":"https://usercode.tscircuit.com/user_code_jobs/view_log_stream?user_code_job_id=36c294e97efbc02cb1f5a3cee7989e9da70361030f8bc8c35750c656c84ff37c","ai_review_requested":false,"github_pr_number":null,"github_pr_title":null,"github_branch_name":null},{"package_release_id":"b9d7e5e9-8ccd-4a35-9104-ce01b96a5d06","package_id":"664d9097-5b33-4886-9c4c-127597354ec8","version":"1.0.3","github_commit_sha":null,"is_locked":false,"is_latest":false,"ready_to_build":true,"is_pr_preview":false,"created_at":"2026-08-19T00:07:28.636Z","circuit_json_build_error":null,"circuit_json_build_error_last_updated_at":null,"has_transpiled":false,"transpilation_error":null,"transpilation_logs":null,"transpilation_in_progress":false,"transpilation_started_at":null,"transpilation_completed_at":null,"transpilation_is_stale":false,"transpilation_display_status":"pending","fs_sha":"md5-cb973d6bca7a6dae029a18bcd1d23d23","circuit_json_build_logs":null,"circuit_json_build_in_progress":false,"circuit_json_build_started_at":null,"circuit_json_build_completed_at":null,"circuit_json_build_is_stale":false,"circuit_json_build_display_status":"pending","image_generation_error":null,"image_generation_error_last_updated_at":null,"image_generation_logs":null,"image_generation_in_progress":false,"image_generation_started_at":null,"image_generation_completed_at":null,"image_generation_is_stale":false,"image_generation_display_status":"pending","pcb_preview_image_url":"https://api.tscircuit.com/package_files/view?package_release_id=b9d7e5e9-8ccd-4a35-9104-ce01b96a5d06\u0026file_path=dist%2Findex%2Fpcb.svg","sch_preview_image_url":"https://api.tscircuit.com/package_files/view?package_release_id=b9d7e5e9-8ccd-4a35-9104-ce01b96a5d06\u0026file_path=dist%2Findex%2Fschematic.svg","cad_preview_image_url":"https://api.tscircuit.com/package_files/view?package_release_id=b9d7e5e9-8ccd-4a35-9104-ce01b96a5d06\u0026file_path=dist%2Findex%2F3d.png","package_release_website_url":null,"display_status":"pending","latest_package_build_id":"66d0c808-6000-42b8-8bde-b613951f0119","user_code_job_started_at":"2026-08-19T00:07:46.822Z","user_code_job_completed_at":"2026-08-19T00:09:03.633Z","user_code_job_error":null,"user_code_job_completed_logs":null,"user_code_job_log_stream_url":"https://usercode.tscircuit.com/user_code_jobs/view_log_stream?user_code_job_id=713a42525c5e9fcb1f6f1d6daad467cac62349b64b1a813eb475df8a30adcf79","ai_review_requested":false,"github_pr_number":null,"github_pr_title":null,"github_branch_name":null},{"package_release_id":"8abc9cf1-1b18-4c13-8f58-cd906fd74e43","package_id":"664d9097-5b33-4886-9c4c-127597354ec8","version":"1.0.2","github_commit_sha":null,"is_locked":false,"is_latest":false,"ready_to_build":true,"is_pr_preview":false,"created_at":"2026-08-18T23:57:25.951Z","circuit_json_build_error":null,"circuit_json_build_error_last_updated_at":null,"has_transpiled":false,"transpilation_error":null,"transpilation_logs":null,"transpilation_in_progress":false,"transpilation_started_at":null,"transpilation_completed_at":null,"transpilation_is_stale":false,"transpilation_display_status":"pending","fs_sha":"md5-c99083b1daa2cb4da65a0ac5ae8a0e49","circuit_json_build_logs":null,"circuit_json_build_in_progress":false,"circuit_json_build_started_at":null,"circuit_json_build_completed_at":null,"circuit_json_build_is_stale":false,"circuit_json_build_display_status":"pending","image_generation_error":null,"image_generation_error_last_updated_at":null,"image_generation_logs":null,"image_generation_in_progress":false,"image_generation_started_at":null,"image_generation_completed_at":null,"image_generation_is_stale":false,"image_generation_display_status":"pending","pcb_preview_image_url":"https://api.tscircuit.com/package_files/view?package_release_id=8abc9cf1-1b18-4c13-8f58-cd906fd74e43\u0026file_path=dist%2Findex%2Fpcb.svg","sch_preview_image_url":"https://api.tscircuit.com/package_files/view?package_release_id=8abc9cf1-1b18-4c13-8f58-cd906fd74e43\u0026file_path=dist%2Findex%2Fschematic.svg","cad_preview_image_url":"https://api.tscircuit.com/package_files/view?package_release_id=8abc9cf1-1b18-4c13-8f58-cd906fd74e43\u0026file_path=dist%2Findex%2F3d.png","package_release_website_url":null,"display_status":"pending","latest_package_build_id":"7e7daa5e-98ce-4ca2-a6e8-296ea3ca72d0","user_code_job_started_at":"2026-08-18T23:57:38.230Z","user_code_job_completed_at":"2026-08-18T23:58:59.810Z","user_code_job_error":null,"user_code_job_completed_logs":null,"user_code_job_log_stream_url":"https://usercode.tscircuit.com/user_code_jobs/view_log_stream?user_code_job_id=88340a9e3692f0b54950adaa5c3423906ebfb044b63b3a9745eb8b6196806f4a","ai_review_requested":false,"github_pr_number":null,"github_pr_title":null,"github_branch_name":null},{"package_release_id":"414c9ebb-9247-40c7-8d8a-ba0e4d698875","package_id":"664d9097-5b33-4886-9c4c-127597354ec8","version":"1.0.1","github_commit_sha":null,"is_locked":false,"is_latest":false,"ready_to_build":true,"is_pr_preview":false,"created_at":"2026-08-18T22:15:42.595Z","circuit_json_build_error":null,"circuit_json_build_error_last_updated_at":null,"has_transpiled":false,"transpilation_error":null,"transpilation_logs":null,"transpilation_in_progress":false,"transpilation_started_at":null,"transpilation_completed_at":null,"transpilation_is_stale":false,"transpilation_display_status":"pending","fs_sha":"md5-383811e5ffcd7942eb8e70a73c595b41","circuit_json_build_logs":null,"circuit_json_build_in_progress":false,"circuit_json_build_started_at":null,"circuit_json_build_completed_at":null,"circuit_json_build_is_stale":false,"circuit_json_build_display_status":"pending","image_generation_error":null,"image_generation_error_last_updated_at":null,"image_generation_logs":null,"image_generation_in_progress":false,"image_generation_started_at":null,"image_generation_completed_at":null,"image_generation_is_stale":false,"image_generation_display_status":"pending","pcb_preview_image_url":"https://api.tscircuit.com/package_files/view?package_release_id=414c9ebb-9247-40c7-8d8a-ba0e4d698875\u0026file_path=dist%2Findex%2Fpcb.svg","sch_preview_image_url":"https://api.tscircuit.com/package_files/view?package_release_id=414c9ebb-9247-40c7-8d8a-ba0e4d698875\u0026file_path=dist%2Findex%2Fschematic.svg","cad_preview_image_url":"https://api.tscircuit.com/package_files/view?package_release_id=414c9ebb-9247-40c7-8d8a-ba0e4d698875\u0026file_path=dist%2Findex%2F3d.png","package_release_website_url":null,"display_status":"pending","latest_package_build_id":"78142397-6ddd-4227-946a-da9bf1d95353","user_code_job_started_at":"2026-08-18T22:15:56.658Z","user_code_job_completed_at":"2026-08-18T22:17:28.314Z","user_code_job_error":null,"user_code_job_completed_logs":null,"user_code_job_log_stream_url":"https://usercode.tscircuit.com/user_code_jobs/view_log_stream?user_code_job_id=9bd740be2027af3a920052af61972055380555b97d3f0756364fd5e19765d1e0","ai_review_requested":false,"github_pr_number":null,"github_pr_title":null,"github_branch_name":null},{"package_release_id":"52546987-10f7-466e-b303-d30801ffd712","package_id":"664d9097-5b33-4886-9c4c-127597354ec8","version":"1.0.0","github_commit_sha":null,"is_locked":false,"is_latest":false,"ready_to_build":true,"is_pr_preview":false,"created_at":"2026-08-18T20:46:22.846Z","circuit_json_build_error":null,"circuit_json_build_error_last_updated_at":null,"has_transpiled":false,"transpilation_error":null,"transpilation_logs":null,"transpilation_in_progress":false,"transpilation_started_at":null,"transpilation_completed_at":null,"transpilation_is_stale":false,"transpilation_display_status":"pending","fs_sha":"md5-3be1207a47d60b8c8c46639dc473f393","circuit_json_build_logs":null,"circuit_json_build_in_progress":false,"circuit_json_build_started_at":null,"circuit_json_build_completed_at":null,"circuit_json_build_is_stale":false,"circuit_json_build_display_status":"pending","image_generation_error":null,"image_generation_error_last_updated_at":null,"image_generation_logs":null,"image_generation_in_progress":false,"image_generation_started_at":null,"image_generation_completed_at":null,"image_generation_is_stale":false,"image_generation_display_status":"pending","pcb_preview_image_url":"https://api.tscircuit.com/package_files/view?package_release_id=52546987-10f7-466e-b303-d30801ffd712\u0026file_path=dist%2Findex%2Fpcb.svg","sch_preview_image_url":"https://api.tscircuit.com/package_files/view?package_release_id=52546987-10f7-466e-b303-d30801ffd712\u0026file_path=dist%2Findex%2Fschematic.svg","cad_preview_image_url":"https://api.tscircuit.com/package_files/view?package_release_id=52546987-10f7-466e-b303-d30801ffd712\u0026file_path=dist%2Findex%2F3d.png","package_release_website_url":null,"display_status":"pending","latest_package_build_id":"cbf46b05-5b90-4dd1-ba13-badef7cc552d","user_code_job_started_at":"2026-08-18T20:46:36.242Z","user_code_job_completed_at":"2026-08-18T20:47:46.933Z","user_code_job_error":null,"user_code_job_completed_logs":null,"user_code_job_log_stream_url":"https://usercode.tscircuit.com/user_code_jobs/view_log_stream?user_code_job_id=2a2bfa73e897b5fdfc39bf5120e5714f10a7a0db840f2d376111ec710f8b3404","ai_review_requested":false,"github_pr_number":null,"github_pr_title":null,"github_branch_name":null}]; window.SSR_PACKAGE_BUILDS = []; window.SSR_RELATED_PACKAGES = [{"package_id":"1ef78ebd-82a5-4c8f-9d50-20d2214060d3","creator_account_id":"8d5e1af7-a381-4aaf-b208-56fa4e9d5a45","latest_package_release_id":"9f04d6d0-fd31-46e9-9b60-a3245f1c282a","last_built_release_id":"9f04d6d0-fd31-46e9-9b60-a3245f1c282a","latest_package_release_fs_sha":"md5-5b46693fb1aca8fd65f3ee614c9a93e6","latest_pcb_preview_image_url":"https://api.tscircuit.com/package_files/view?package_release_id=9f04d6d0-fd31-46e9-9b60-a3245f1c282a\u0026file_path=dist%2Fddr-only%2Fpcb.svg","latest_sch_preview_image_url":"https://api.tscircuit.com/package_files/view?package_release_id=9f04d6d0-fd31-46e9-9b60-a3245f1c282a\u0026file_path=dist%2Fddr-only%2Fschematic.svg","latest_cad_preview_image_url":"https://api.tscircuit.com/package_files/view?package_release_id=9f04d6d0-fd31-46e9-9b60-a3245f1c282a\u0026file_path=dist%2Fddr-only%2F3d.png","latest_version":"1.0.16","license":"unset","owner_org_id":"94044d23-fb18-49b3-bcb5-8a702defe7d6","org_owner_tscircuit_handle":"0hmX","owner_github_username":"0hmX","github_repo_full_name":null,"is_source_from_github":false,"description":null,"name":"0hmX/simplified-am62l-computer","unscoped_name":"simplified-am62l-computer","star_count":0,"created_at":"2026-08-07T16:09:40.939Z","updated_at":"2026-08-24T13:46:34.470Z","ai_description":"This code defines components and scripts for physically representing and routing high-speed DDR memory signals, power lines, and ground planes on an 8-layer PCB with detailed pin assignments, copper pours, and precise via and trace layouts based on TI EVM reference data.","ai_usage_instructions":null,"is_private":false,"is_unlisted":false,"is_public":true,"public_dist_enabled":false,"has_public_dist":true,"starred_at":null,"default_view":"files","website":null,"github_installation_id":null,"allow_pr_previews":false,"related_type":"same_author","thumbnail_url":"https://api.tscircuit.com/package_files/view?package_release_id=9f04d6d0-fd31-46e9-9b60-a3245f1c282a\u0026file_path=dist%2Fddr-only%2Fpcb.svg"},{"package_id":"ede89d02-7042-4b78-b370-4f9e9ce24568","creator_account_id":"9f398687-69d0-4ef4-a48c-bb6dc990e7df","latest_package_release_id":"0d3197ed-fd8c-4290-8fde-e32ec62ed9c5","last_built_release_id":"0d3197ed-fd8c-4290-8fde-e32ec62ed9c5","latest_package_release_fs_sha":"md5-4e43da8ec34f8f294e7327fc4121c168","latest_pcb_preview_image_url":"https://api.tscircuit.com/package_files/view?package_release_id=0d3197ed-fd8c-4290-8fde-e32ec62ed9c5\u0026file_path=dist%2Findex%2Fpcb.svg","latest_sch_preview_image_url":"https://api.tscircuit.com/package_files/view?package_release_id=0d3197ed-fd8c-4290-8fde-e32ec62ed9c5\u0026file_path=dist%2Findex%2Fschematic.svg","latest_cad_preview_image_url":"https://api.tscircuit.com/package_files/view?package_release_id=0d3197ed-fd8c-4290-8fde-e32ec62ed9c5\u0026file_path=dist%2Findex%2F3d.png","latest_version":"1.3.0","license":"unset","owner_org_id":"f154d4e0-ac63-47a3-948e-a13da34df910","org_owner_tscircuit_handle":"seveibar","owner_github_username":"seveibar","github_repo_full_name":null,"is_source_from_github":false,"description":null,"name":"seveibar/f1c100s-dev-board","unscoped_name":"f1c100s-dev-board","star_count":0,"created_at":"2026-09-13T23:03:15.223Z","updated_at":"2026-09-13T23:47:36.981Z","ai_description":"This code defines the hardware layout and schematic for a four-layer F1C100S-based module, including footprint placement, pin mappings, power regulation, decoupling capacitors, support components, and routing configurations, enabling automated PCB generation, routing, and verification.","ai_usage_instructions":null,"is_private":false,"is_unlisted":false,"is_public":true,"public_dist_enabled":false,"has_public_dist":true,"starred_at":null,"default_view":"files","website":null,"github_installation_id":null,"allow_pr_previews":false,"related_type":"similar_ai_description","thumbnail_url":"https://api.tscircuit.com/package_files/view?package_release_id=0d3197ed-fd8c-4290-8fde-e32ec62ed9c5\u0026file_path=dist%2Findex%2Fpcb.svg"},{"package_id":"7065b9a6-03de-43a1-ba42-2a0ead33b548","creator_account_id":"1f745cb8-1b99-4215-905f-f8e3dc29bc28","latest_package_release_id":"5746ef1e-d91a-4043-9db3-2cc17f89d777","last_built_release_id":"5746ef1e-d91a-4043-9db3-2cc17f89d777","latest_package_release_fs_sha":"md5-27fc15676f25d1e3a229466d1de0fe7a","latest_pcb_preview_image_url":"https://api.tscircuit.com/package_files/view?package_release_id=5746ef1e-d91a-4043-9db3-2cc17f89d777\u0026file_path=dist%2Findex%2Fpcb.svg","latest_sch_preview_image_url":"https://api.tscircuit.com/package_files/view?package_release_id=5746ef1e-d91a-4043-9db3-2cc17f89d777\u0026file_path=dist%2Findex%2Fschematic.svg","latest_cad_preview_image_url":"https://api.tscircuit.com/package_files/view?package_release_id=5746ef1e-d91a-4043-9db3-2cc17f89d777\u0026file_path=dist%2Findex%2F3d.png","latest_version":"1.0.1","license":"unset","owner_org_id":"60917f07-d371-4c51-854f-e2bd7dab9e5a","org_owner_tscircuit_handle":"hrithik18k","owner_github_username":null,"github_repo_full_name":null,"is_source_from_github":false,"description":null,"name":"hrithik18k/smart-switch-pcb","unscoped_name":"smart-switch-pcb","star_count":0,"created_at":"2026-09-09T11:12:10.428Z","updated_at":"2026-09-09T11:56:59.112Z","ai_description":"The AO3400A component models a SOT-23 N-channel MOSFET with labeled pins for Gate, Source, and Drain, including 3D CAD models and schematic symbols for electronic circuit design.","ai_usage_instructions":null,"is_private":false,"is_unlisted":false,"is_public":true,"public_dist_enabled":false,"has_public_dist":true,"starred_at":null,"default_view":"files","website":null,"github_installation_id":null,"allow_pr_previews":false,"related_type":"random","thumbnail_url":"https://api.tscircuit.com/package_files/view?package_release_id=5746ef1e-d91a-4043-9db3-2cc17f89d777\u0026file_path=dist%2Findex%2Fpcb.svg"}]; window.SSR_PACKAGE_ROUTE = {"author":"0hmX","packageName":"robocraze-ov7670-camera-module-clone","packageNameWithScope":"0hmX/robocraze-ov7670-camera-module-clone","version":null,"isLegacyRoute":false,"kind":"file","filePath":"scripts/prepare-jlc-artifacts.ts"};
zip -d ${gerberArchivePath} bom.csv pick_and_place.csv`.quiet().nothrow()
await Bun.
scripts/prepare-jlc-artifacts.ts - 0hmX/robocraze-ov7670-camera-module-clone - tscircuit
scripts/prepare-jlc-artifacts.ts - 0hmX/robocraze-ov7670-camera-module-clone - tscircuit
zip -d ${gerberArchivePath} bom.csv pick_and_place.csv`.quiet().nothrow()\n await Bun.
scripts/prepare-jlc-artifacts.ts - 0hmX/robocraze-ov7670-camera-module-clone - tscircuit
zip -j ${gerberArchivePath} ${archiveFilesDir}/bom.csv ${archiveFilesDir}/pick_and_place.csv ${archiveFilesDir}/manual_assembly.csv ${archiveFilesDir}/dnp.csv ${archiveFilesDir}/assembly_notes.txt`.quiet()\n}\n\nconsole.log(`Prepared ${smtParts.length} JLC SMT placements, ${manualRows.length - 1} manual/consigned items, and ${dnpRows.length - 1} DNPs.`)\n","content_mimetype":"text/typescript","created_at":"2026-08-24T13:23:42.504Z"}; window.SSR_PACKAGE_RELEASES = [{"package_release_id":"b165339e-f482-4d8c-9803-33fb4333a2b6","package_id":"664d9097-5b33-4886-9c4c-127597354ec8","version":"1.0.7","github_commit_sha":null,"is_locked":false,"is_latest":true,"ready_to_build":true,"is_pr_preview":false,"created_at":"2026-08-24T13:23:41.618Z","circuit_json_build_error":null,"circuit_json_build_error_last_updated_at":null,"has_transpiled":false,"transpilation_error":null,"transpilation_logs":null,"transpilation_in_progress":false,"transpilation_started_at":null,"transpilation_completed_at":null,"transpilation_is_stale":true,"transpilation_display_status":"pending","fs_sha":"md5-e4247102fc0198eef628891988afe5cd","circuit_json_build_logs":null,"circuit_json_build_in_progress":false,"circuit_json_build_started_at":null,"circuit_json_build_completed_at":null,"circuit_json_build_is_stale":true,"circuit_json_build_display_status":"pending","image_generation_error":null,"image_generation_error_last_updated_at":null,"image_generation_logs":null,"image_generation_in_progress":false,"image_generation_started_at":null,"image_generation_completed_at":null,"image_generation_is_stale":true,"image_generation_display_status":"pending","pcb_preview_image_url":null,"sch_preview_image_url":null,"cad_preview_image_url":"https://api.tscircuit.com/package_files/view?package_release_id=b165339e-f482-4d8c-9803-33fb4333a2b6\u0026file_path=dist%2Findex%2F3d.png","package_release_website_url":null,"display_status":"pending","latest_package_build_id":"f2715047-0158-4258-88d6-1a58ee4150c6","user_code_job_started_at":"2026-08-24T13:23:44.508Z","user_code_job_completed_at":"2026-08-24T13:25:35.736Z","user_code_job_error":null,"user_code_job_completed_logs":null,"user_code_job_log_stream_url":"https://usercode.tscircuit.com/user_code_jobs/view_log_stream?user_code_job_id=08a1e392f8de01ebaa77e50228e22d61099362826a7f93bfb39491c8dcafe51a","ai_review_requested":false,"github_pr_number":null,"github_pr_title":null,"github_branch_name":null},{"package_release_id":"99c5f93b-edfc-4cac-a582-ec8988f59d85","package_id":"664d9097-5b33-4886-9c4c-127597354ec8","version":"1.0.6","github_commit_sha":null,"is_locked":false,"is_latest":false,"ready_to_build":true,"is_pr_preview":false,"created_at":"2026-08-24T12:16:13.016Z","circuit_json_build_error":null,"circuit_json_build_error_last_updated_at":null,"has_transpiled":false,"transpilation_error":null,"transpilation_logs":null,"transpilation_in_progress":false,"transpilation_started_at":null,"transpilation_completed_at":null,"transpilation_is_stale":false,"transpilation_display_status":"pending","fs_sha":"md5-14b3010608ac46b7c76ddb0bdf1c2769","circuit_json_build_logs":null,"circuit_json_build_in_progress":false,"circuit_json_build_started_at":null,"circuit_json_build_completed_at":null,"circuit_json_build_is_stale":false,"circuit_json_build_display_status":"pending","image_generation_error":null,"image_generation_error_last_updated_at":null,"image_generation_logs":null,"image_generation_in_progress":false,"image_generation_started_at":null,"image_generation_completed_at":null,"image_generation_is_stale":false,"image_generation_display_status":"pending","pcb_preview_image_url":null,"sch_preview_image_url":null,"cad_preview_image_url":"https://api.tscircuit.com/package_files/view?package_release_id=99c5f93b-edfc-4cac-a582-ec8988f59d85\u0026file_path=dist%2Findex%2F3d.png","package_release_website_url":null,"display_status":"pending","latest_package_build_id":"15e59836-d9a1-484a-9d3c-027d94bbfaa5","user_code_job_started_at":"2026-08-24T12:16:34.107Z","user_code_job_completed_at":"2026-08-24T12:18:35.336Z","user_code_job_error":null,"user_code_job_completed_logs":null,"user_code_job_log_stream_url":"https://usercode.tscircuit.com/user_code_jobs/view_log_stream?user_code_job_id=0e62e5ec538c8f68c53b99737a0fafceab877a619b69683629cae5f694cb1912","ai_review_requested":false,"github_pr_number":null,"github_pr_title":null,"github_branch_name":null},{"package_release_id":"e5912aea-226c-4f88-8c9c-72c31b06fd28","package_id":"664d9097-5b33-4886-9c4c-127597354ec8","version":"1.0.5","github_commit_sha":null,"is_locked":false,"is_latest":false,"ready_to_build":true,"is_pr_preview":false,"created_at":"2026-08-20T14:13:29.867Z","circuit_json_build_error":null,"circuit_json_build_error_last_updated_at":null,"has_transpiled":false,"transpilation_error":null,"transpilation_logs":null,"transpilation_in_progress":false,"transpilation_started_at":null,"transpilation_completed_at":null,"transpilation_is_stale":false,"transpilation_display_status":"pending","fs_sha":"md5-e28760f00ede8a7b77c3bc349d506a19","circuit_json_build_logs":null,"circuit_json_build_in_progress":false,"circuit_json_build_started_at":null,"circuit_json_build_completed_at":null,"circuit_json_build_is_stale":false,"circuit_json_build_display_status":"pending","image_generation_error":null,"image_generation_error_last_updated_at":null,"image_generation_logs":null,"image_generation_in_progress":false,"image_generation_started_at":null,"image_generation_completed_at":null,"image_generation_is_stale":false,"image_generation_display_status":"pending","pcb_preview_image_url":null,"sch_preview_image_url":null,"cad_preview_image_url":"https://api.tscircuit.com/package_files/view?package_release_id=e5912aea-226c-4f88-8c9c-72c31b06fd28\u0026file_path=dist%2Findex%2F3d.png","package_release_website_url":null,"display_status":"pending","latest_package_build_id":"22dc075e-a7b9-4418-b244-6b9a75f6bac4","user_code_job_started_at":"2026-08-20T14:13:43.035Z","user_code_job_completed_at":"2026-08-20T14:15:02.833Z","user_code_job_error":null,"user_code_job_completed_logs":null,"user_code_job_log_stream_url":"https://usercode.tscircuit.com/user_code_jobs/view_log_stream?user_code_job_id=a19e6bb13decec7243bdae99f42bd560e87b2aa513253d9249ca153e39baa48f","ai_review_requested":false,"github_pr_number":null,"github_pr_title":null,"github_branch_name":null},{"package_release_id":"adaf2e95-a0ac-4720-936b-6ac03722ca3f","package_id":"664d9097-5b33-4886-9c4c-127597354ec8","version":"1.0.4","github_commit_sha":null,"is_locked":false,"is_latest":false,"ready_to_build":true,"is_pr_preview":false,"created_at":"2026-08-19T00:39:14.298Z","circuit_json_build_error":null,"circuit_json_build_error_last_updated_at":null,"has_transpiled":false,"transpilation_error":null,"transpilation_logs":null,"transpilation_in_progress":false,"transpilation_started_at":null,"transpilation_completed_at":null,"transpilation_is_stale":false,"transpilation_display_status":"pending","fs_sha":"md5-994de436614f12537d7cfbb1e3cede9d","circuit_json_build_logs":null,"circuit_json_build_in_progress":false,"circuit_json_build_started_at":null,"circuit_json_build_completed_at":null,"circuit_json_build_is_stale":false,"circuit_json_build_display_status":"pending","image_generation_error":null,"image_generation_error_last_updated_at":null,"image_generation_logs":null,"image_generation_in_progress":false,"image_generation_started_at":null,"image_generation_completed_at":null,"image_generation_is_stale":false,"image_generation_display_status":"pending","pcb_preview_image_url":"https://api.tscircuit.com/package_files/view?package_release_id=adaf2e95-a0ac-4720-936b-6ac03722ca3f\u0026file_path=dist%2Findex%2Fpcb.svg","sch_preview_image_url":"https://api.tscircuit.com/package_files/view?package_release_id=adaf2e95-a0ac-4720-936b-6ac03722ca3f\u0026file_path=dist%2Findex%2Fschematic.svg","cad_preview_image_url":"https://api.tscircuit.com/package_files/view?package_release_id=adaf2e95-a0ac-4720-936b-6ac03722ca3f\u0026file_path=dist%2Findex%2F3d.png","package_release_website_url":null,"display_status":"pending","latest_package_build_id":"8527b33b-ded7-40db-a351-f683a91f962f","user_code_job_started_at":"2026-08-19T00:39:26.978Z","user_code_job_completed_at":"2026-08-19T00:40:43.859Z","user_code_job_error":null,"user_code_job_completed_logs":null,"user_code_job_log_stream_url":"https://usercode.tscircuit.com/user_code_jobs/view_log_stream?user_code_job_id=36c294e97efbc02cb1f5a3cee7989e9da70361030f8bc8c35750c656c84ff37c","ai_review_requested":false,"github_pr_number":null,"github_pr_title":null,"github_branch_name":null},{"package_release_id":"b9d7e5e9-8ccd-4a35-9104-ce01b96a5d06","package_id":"664d9097-5b33-4886-9c4c-127597354ec8","version":"1.0.3","github_commit_sha":null,"is_locked":false,"is_latest":false,"ready_to_build":true,"is_pr_preview":false,"created_at":"2026-08-19T00:07:28.636Z","circuit_json_build_error":null,"circuit_json_build_error_last_updated_at":null,"has_transpiled":false,"transpilation_error":null,"transpilation_logs":null,"transpilation_in_progress":false,"transpilation_started_at":null,"transpilation_completed_at":null,"transpilation_is_stale":false,"transpilation_display_status":"pending","fs_sha":"md5-cb973d6bca7a6dae029a18bcd1d23d23","circuit_json_build_logs":null,"circuit_json_build_in_progress":false,"circuit_json_build_started_at":null,"circuit_json_build_completed_at":null,"circuit_json_build_is_stale":false,"circuit_json_build_display_status":"pending","image_generation_error":null,"image_generation_error_last_updated_at":null,"image_generation_logs":null,"image_generation_in_progress":false,"image_generation_started_at":null,"image_generation_completed_at":null,"image_generation_is_stale":false,"image_generation_display_status":"pending","pcb_preview_image_url":"https://api.tscircuit.com/package_files/view?package_release_id=b9d7e5e9-8ccd-4a35-9104-ce01b96a5d06\u0026file_path=dist%2Findex%2Fpcb.svg","sch_preview_image_url":"https://api.tscircuit.com/package_files/view?package_release_id=b9d7e5e9-8ccd-4a35-9104-ce01b96a5d06\u0026file_path=dist%2Findex%2Fschematic.svg","cad_preview_image_url":"https://api.tscircuit.com/package_files/view?package_release_id=b9d7e5e9-8ccd-4a35-9104-ce01b96a5d06\u0026file_path=dist%2Findex%2F3d.png","package_release_website_url":null,"display_status":"pending","latest_package_build_id":"66d0c808-6000-42b8-8bde-b613951f0119","user_code_job_started_at":"2026-08-19T00:07:46.822Z","user_code_job_completed_at":"2026-08-19T00:09:03.633Z","user_code_job_error":null,"user_code_job_completed_logs":null,"user_code_job_log_stream_url":"https://usercode.tscircuit.com/user_code_jobs/view_log_stream?user_code_job_id=713a42525c5e9fcb1f6f1d6daad467cac62349b64b1a813eb475df8a30adcf79","ai_review_requested":false,"github_pr_number":null,"github_pr_title":null,"github_branch_name":null},{"package_release_id":"8abc9cf1-1b18-4c13-8f58-cd906fd74e43","package_id":"664d9097-5b33-4886-9c4c-127597354ec8","version":"1.0.2","github_commit_sha":null,"is_locked":false,"is_latest":false,"ready_to_build":true,"is_pr_preview":false,"created_at":"2026-08-18T23:57:25.951Z","circuit_json_build_error":null,"circuit_json_build_error_last_updated_at":null,"has_transpiled":false,"transpilation_error":null,"transpilation_logs":null,"transpilation_in_progress":false,"transpilation_started_at":null,"transpilation_completed_at":null,"transpilation_is_stale":false,"transpilation_display_status":"pending","fs_sha":"md5-c99083b1daa2cb4da65a0ac5ae8a0e49","circuit_json_build_logs":null,"circuit_json_build_in_progress":false,"circuit_json_build_started_at":null,"circuit_json_build_completed_at":null,"circuit_json_build_is_stale":false,"circuit_json_build_display_status":"pending","image_generation_error":null,"image_generation_error_last_updated_at":null,"image_generation_logs":null,"image_generation_in_progress":false,"image_generation_started_at":null,"image_generation_completed_at":null,"image_generation_is_stale":false,"image_generation_display_status":"pending","pcb_preview_image_url":"https://api.tscircuit.com/package_files/view?package_release_id=8abc9cf1-1b18-4c13-8f58-cd906fd74e43\u0026file_path=dist%2Findex%2Fpcb.svg","sch_preview_image_url":"https://api.tscircuit.com/package_files/view?package_release_id=8abc9cf1-1b18-4c13-8f58-cd906fd74e43\u0026file_path=dist%2Findex%2Fschematic.svg","cad_preview_image_url":"https://api.tscircuit.com/package_files/view?package_release_id=8abc9cf1-1b18-4c13-8f58-cd906fd74e43\u0026file_path=dist%2Findex%2F3d.png","package_release_website_url":null,"display_status":"pending","latest_package_build_id":"7e7daa5e-98ce-4ca2-a6e8-296ea3ca72d0","user_code_job_started_at":"2026-08-18T23:57:38.230Z","user_code_job_completed_at":"2026-08-18T23:58:59.810Z","user_code_job_error":null,"user_code_job_completed_logs":null,"user_code_job_log_stream_url":"https://usercode.tscircuit.com/user_code_jobs/view_log_stream?user_code_job_id=88340a9e3692f0b54950adaa5c3423906ebfb044b63b3a9745eb8b6196806f4a","ai_review_requested":false,"github_pr_number":null,"github_pr_title":null,"github_branch_name":null},{"package_release_id":"414c9ebb-9247-40c7-8d8a-ba0e4d698875","package_id":"664d9097-5b33-4886-9c4c-127597354ec8","version":"1.0.1","github_commit_sha":null,"is_locked":false,"is_latest":false,"ready_to_build":true,"is_pr_preview":false,"created_at":"2026-08-18T22:15:42.595Z","circuit_json_build_error":null,"circuit_json_build_error_last_updated_at":null,"has_transpiled":false,"transpilation_error":null,"transpilation_logs":null,"transpilation_in_progress":false,"transpilation_started_at":null,"transpilation_completed_at":null,"transpilation_is_stale":false,"transpilation_display_status":"pending","fs_sha":"md5-383811e5ffcd7942eb8e70a73c595b41","circuit_json_build_logs":null,"circuit_json_build_in_progress":false,"circuit_json_build_started_at":null,"circuit_json_build_completed_at":null,"circuit_json_build_is_stale":false,"circuit_json_build_display_status":"pending","image_generation_error":null,"image_generation_error_last_updated_at":null,"image_generation_logs":null,"image_generation_in_progress":false,"image_generation_started_at":null,"image_generation_completed_at":null,"image_generation_is_stale":false,"image_generation_display_status":"pending","pcb_preview_image_url":"https://api.tscircuit.com/package_files/view?package_release_id=414c9ebb-9247-40c7-8d8a-ba0e4d698875\u0026file_path=dist%2Findex%2Fpcb.svg","sch_preview_image_url":"https://api.tscircuit.com/package_files/view?package_release_id=414c9ebb-9247-40c7-8d8a-ba0e4d698875\u0026file_path=dist%2Findex%2Fschematic.svg","cad_preview_image_url":"https://api.tscircuit.com/package_files/view?package_release_id=414c9ebb-9247-40c7-8d8a-ba0e4d698875\u0026file_path=dist%2Findex%2F3d.png","package_release_website_url":null,"display_status":"pending","latest_package_build_id":"78142397-6ddd-4227-946a-da9bf1d95353","user_code_job_started_at":"2026-08-18T22:15:56.658Z","user_code_job_completed_at":"2026-08-18T22:17:28.314Z","user_code_job_error":null,"user_code_job_completed_logs":null,"user_code_job_log_stream_url":"https://usercode.tscircuit.com/user_code_jobs/view_log_stream?user_code_job_id=9bd740be2027af3a920052af61972055380555b97d3f0756364fd5e19765d1e0","ai_review_requested":false,"github_pr_number":null,"github_pr_title":null,"github_branch_name":null},{"package_release_id":"52546987-10f7-466e-b303-d30801ffd712","package_id":"664d9097-5b33-4886-9c4c-127597354ec8","version":"1.0.0","github_commit_sha":null,"is_locked":false,"is_latest":false,"ready_to_build":true,"is_pr_preview":false,"created_at":"2026-08-18T20:46:22.846Z","circuit_json_build_error":null,"circuit_json_build_error_last_updated_at":null,"has_transpiled":false,"transpilation_error":null,"transpilation_logs":null,"transpilation_in_progress":false,"transpilation_started_at":null,"transpilation_completed_at":null,"transpilation_is_stale":false,"transpilation_display_status":"pending","fs_sha":"md5-3be1207a47d60b8c8c46639dc473f393","circuit_json_build_logs":null,"circuit_json_build_in_progress":false,"circuit_json_build_started_at":null,"circuit_json_build_completed_at":null,"circuit_json_build_is_stale":false,"circuit_json_build_display_status":"pending","image_generation_error":null,"image_generation_error_last_updated_at":null,"image_generation_logs":null,"image_generation_in_progress":false,"image_generation_started_at":null,"image_generation_completed_at":null,"image_generation_is_stale":false,"image_generation_display_status":"pending","pcb_preview_image_url":"https://api.tscircuit.com/package_files/view?package_release_id=52546987-10f7-466e-b303-d30801ffd712\u0026file_path=dist%2Findex%2Fpcb.svg","sch_preview_image_url":"https://api.tscircuit.com/package_files/view?package_release_id=52546987-10f7-466e-b303-d30801ffd712\u0026file_path=dist%2Findex%2Fschematic.svg","cad_preview_image_url":"https://api.tscircuit.com/package_files/view?package_release_id=52546987-10f7-466e-b303-d30801ffd712\u0026file_path=dist%2Findex%2F3d.png","package_release_website_url":null,"display_status":"pending","latest_package_build_id":"cbf46b05-5b90-4dd1-ba13-badef7cc552d","user_code_job_started_at":"2026-08-18T20:46:36.242Z","user_code_job_completed_at":"2026-08-18T20:47:46.933Z","user_code_job_error":null,"user_code_job_completed_logs":null,"user_code_job_log_stream_url":"https://usercode.tscircuit.com/user_code_jobs/view_log_stream?user_code_job_id=2a2bfa73e897b5fdfc39bf5120e5714f10a7a0db840f2d376111ec710f8b3404","ai_review_requested":false,"github_pr_number":null,"github_pr_title":null,"github_branch_name":null}]; window.SSR_PACKAGE_BUILDS = []; window.SSR_RELATED_PACKAGES = [{"package_id":"1ef78ebd-82a5-4c8f-9d50-20d2214060d3","creator_account_id":"8d5e1af7-a381-4aaf-b208-56fa4e9d5a45","latest_package_release_id":"9f04d6d0-fd31-46e9-9b60-a3245f1c282a","last_built_release_id":"9f04d6d0-fd31-46e9-9b60-a3245f1c282a","latest_package_release_fs_sha":"md5-5b46693fb1aca8fd65f3ee614c9a93e6","latest_pcb_preview_image_url":"https://api.tscircuit.com/package_files/view?package_release_id=9f04d6d0-fd31-46e9-9b60-a3245f1c282a\u0026file_path=dist%2Fddr-only%2Fpcb.svg","latest_sch_preview_image_url":"https://api.tscircuit.com/package_files/view?package_release_id=9f04d6d0-fd31-46e9-9b60-a3245f1c282a\u0026file_path=dist%2Fddr-only%2Fschematic.svg","latest_cad_preview_image_url":"https://api.tscircuit.com/package_files/view?package_release_id=9f04d6d0-fd31-46e9-9b60-a3245f1c282a\u0026file_path=dist%2Fddr-only%2F3d.png","latest_version":"1.0.16","license":"unset","owner_org_id":"94044d23-fb18-49b3-bcb5-8a702defe7d6","org_owner_tscircuit_handle":"0hmX","owner_github_username":"0hmX","github_repo_full_name":null,"is_source_from_github":false,"description":null,"name":"0hmX/simplified-am62l-computer","unscoped_name":"simplified-am62l-computer","star_count":0,"created_at":"2026-08-07T16:09:40.939Z","updated_at":"2026-08-24T13:46:34.470Z","ai_description":"This code defines components and scripts for physically representing and routing high-speed DDR memory signals, power lines, and ground planes on an 8-layer PCB with detailed pin assignments, copper pours, and precise via and trace layouts based on TI EVM reference data.","ai_usage_instructions":null,"is_private":false,"is_unlisted":false,"is_public":true,"public_dist_enabled":false,"has_public_dist":true,"starred_at":null,"default_view":"files","website":null,"github_installation_id":null,"allow_pr_previews":false,"related_type":"same_author","thumbnail_url":"https://api.tscircuit.com/package_files/view?package_release_id=9f04d6d0-fd31-46e9-9b60-a3245f1c282a\u0026file_path=dist%2Fddr-only%2Fpcb.svg"},{"package_id":"ede89d02-7042-4b78-b370-4f9e9ce24568","creator_account_id":"9f398687-69d0-4ef4-a48c-bb6dc990e7df","latest_package_release_id":"0d3197ed-fd8c-4290-8fde-e32ec62ed9c5","last_built_release_id":"0d3197ed-fd8c-4290-8fde-e32ec62ed9c5","latest_package_release_fs_sha":"md5-4e43da8ec34f8f294e7327fc4121c168","latest_pcb_preview_image_url":"https://api.tscircuit.com/package_files/view?package_release_id=0d3197ed-fd8c-4290-8fde-e32ec62ed9c5\u0026file_path=dist%2Findex%2Fpcb.svg","latest_sch_preview_image_url":"https://api.tscircuit.com/package_files/view?package_release_id=0d3197ed-fd8c-4290-8fde-e32ec62ed9c5\u0026file_path=dist%2Findex%2Fschematic.svg","latest_cad_preview_image_url":"https://api.tscircuit.com/package_files/view?package_release_id=0d3197ed-fd8c-4290-8fde-e32ec62ed9c5\u0026file_path=dist%2Findex%2F3d.png","latest_version":"1.3.0","license":"unset","owner_org_id":"f154d4e0-ac63-47a3-948e-a13da34df910","org_owner_tscircuit_handle":"seveibar","owner_github_username":"seveibar","github_repo_full_name":null,"is_source_from_github":false,"description":null,"name":"seveibar/f1c100s-dev-board","unscoped_name":"f1c100s-dev-board","star_count":0,"created_at":"2026-09-13T23:03:15.223Z","updated_at":"2026-09-13T23:47:36.981Z","ai_description":"This code defines the hardware layout and schematic for a four-layer F1C100S-based module, including footprint placement, pin mappings, power regulation, decoupling capacitors, support components, and routing configurations, enabling automated PCB generation, routing, and verification.","ai_usage_instructions":null,"is_private":false,"is_unlisted":false,"is_public":true,"public_dist_enabled":false,"has_public_dist":true,"starred_at":null,"default_view":"files","website":null,"github_installation_id":null,"allow_pr_previews":false,"related_type":"similar_ai_description","thumbnail_url":"https://api.tscircuit.com/package_files/view?package_release_id=0d3197ed-fd8c-4290-8fde-e32ec62ed9c5\u0026file_path=dist%2Findex%2Fpcb.svg"},{"package_id":"7065b9a6-03de-43a1-ba42-2a0ead33b548","creator_account_id":"1f745cb8-1b99-4215-905f-f8e3dc29bc28","latest_package_release_id":"5746ef1e-d91a-4043-9db3-2cc17f89d777","last_built_release_id":"5746ef1e-d91a-4043-9db3-2cc17f89d777","latest_package_release_fs_sha":"md5-27fc15676f25d1e3a229466d1de0fe7a","latest_pcb_preview_image_url":"https://api.tscircuit.com/package_files/view?package_release_id=5746ef1e-d91a-4043-9db3-2cc17f89d777\u0026file_path=dist%2Findex%2Fpcb.svg","latest_sch_preview_image_url":"https://api.tscircuit.com/package_files/view?package_release_id=5746ef1e-d91a-4043-9db3-2cc17f89d777\u0026file_path=dist%2Findex%2Fschematic.svg","latest_cad_preview_image_url":"https://api.tscircuit.com/package_files/view?package_release_id=5746ef1e-d91a-4043-9db3-2cc17f89d777\u0026file_path=dist%2Findex%2F3d.png","latest_version":"1.0.1","license":"unset","owner_org_id":"60917f07-d371-4c51-854f-e2bd7dab9e5a","org_owner_tscircuit_handle":"hrithik18k","owner_github_username":null,"github_repo_full_name":null,"is_source_from_github":false,"description":null,"name":"hrithik18k/smart-switch-pcb","unscoped_name":"smart-switch-pcb","star_count":0,"created_at":"2026-09-09T11:12:10.428Z","updated_at":"2026-09-09T11:56:59.112Z","ai_description":"The AO3400A component models a SOT-23 N-channel MOSFET with labeled pins for Gate, Source, and Drain, including 3D CAD models and schematic symbols for electronic circuit design.","ai_usage_instructions":null,"is_private":false,"is_unlisted":false,"is_public":true,"public_dist_enabled":false,"has_public_dist":true,"starred_at":null,"default_view":"files","website":null,"github_installation_id":null,"allow_pr_previews":false,"related_type":"random","thumbnail_url":"https://api.tscircuit.com/package_files/view?package_release_id=5746ef1e-d91a-4043-9db3-2cc17f89d777\u0026file_path=dist%2Findex%2Fpcb.svg"}]; window.SSR_PACKAGE_ROUTE = {"author":"0hmX","packageName":"robocraze-ov7670-camera-module-clone","packageNameWithScope":"0hmX/robocraze-ov7670-camera-module-clone","version":null,"isLegacyRoute":false,"kind":"file","filePath":"scripts/prepare-jlc-artifacts.ts"};
zip -j ${gerberArchivePath} ${archiveFilesDir}/bom.csv ${archiveFilesDir}/pick_and_place.csv ${archiveFilesDir}/manual_assembly.csv ${archiveFilesDir}/dnp.csv ${archiveFilesDir}/assembly_notes.txt`.quiet()
}
console.log(`Prepared ${smtParts.length} JLC SMT placements, ${manualRows.length - 1} manual/consigned items, and ${dnpRows.length - 1} DNPs.`)