

Orbit board
Abstract Machines company website and blogs
- Size
- 92.5 × 53.4 mm
- Copper layers
- 4
- Thickness
- 1.6 mm
- Parts
- 26
- Nets
- 21
- Pads
- 165
- Tracks, vias
- 421, 81
- Pours
- 4
- Routed
- Yes
- KiCad
- KiCad 10.0 (file 20260206)
- Created
- 24 Apr 2023
- Updated
- 3 Nov 2026
Overview
Orbit board is an open-source printed circuit board by absmach, from the absmach/website repository on GitHub. It is a 4-layer board of 92.5 × 53.4 mm with 26 parts on 21 nets, routed with 421 tracks and 81 vias.
It is built around the RP2350A. Its parts include 9 capacitors, 5 ICs and 1 connector. It belongs with the RP2350 boards of this library.
Main components
1README
README.mdAbstract Machines Website
Astro + Tailwind source for the Abstract Machines website and blog.
Stack
- Astro (v5)
- Tailwind CSS
Project Structure
src/pages/: Routes (Astro pages).src/components/: Shared UI components.src/layouts/: Page layouts.src/styles/: Identity stylesheets (identity-*.css) shared by the layout and pages.src/content/blogs/: Blog posts (Markdown).src/content.config.ts: Blog frontmatter schema.public/: Static assets (images, favicons, etc).
Development
npm install
npm run devAstro runs on http://localhost:4321 by default.
During development, images and videos missing from public/ are fetched from
https://www.absmach.eu, so the logo and background animations work without local
R2 credentials. An internet connection is required for these assets.
Build & Preview
Public website
The applied AI design is the public website at http://localhost:4321/.
It uses AM blue, self-hosted typography, a full-screen Paris architecture film,
and editorial photography.
/: homepage, selected work, and product catalogue./products/: searchable AI, Infrastructure, and Hardware categories./products/{slug}/: eleven product pages, including Propeller./research/and/research/{elastic,confidential6g}/: research programmes./company/: company background and engineering approach./stories/{nokia,intel,ericsson,target}/: sourced engineering stories./contact/: enquiry form with product and topic preselection.
The contact form submits to the existing /api/contact endpoint. SMTP settings
and delivery requirements are described below. Local browser checks should
intercept submissions rather than sending real mail.
The former /preview/ai/ page routes redirect permanently to the public pages.
Existing product URLs continue to resolve; /synth, /projects, and the two
project detail URLs redirect to their new counterparts. Redirects cover both trailing-slash forms and are excluded
from the sitemap. Public pages have canonical URLs, social metadata, and no
preview-only indexing restriction. Blog posts, guides, solutions, pricing,
legal pages, RSS, and documentation remain available at their existing URLs.
IdentityLayout.astro owns the main navigation, footer, and public metadata.
The product catalogue lives in src/data/identity-products.ts; product pages
and portfolio cards share ProductVisual.astro. The homepage and portfolio
show four AI products, four Infrastructure products, and three Hardware products.
Product tabs, category search, mobile navigation, video controls, and media credits work across the public pages. The silent video pauses offscreen and when the tab is hidden. Reduced-motion and Save-Data preferences keep the still poster until the visitor chooses to play.
Existing media URLs remain at public/preview/ai/media/ to preserve asset
caching. The optimized Paris film is approximately 2.9 MB; editorial photos are
WebP. src/data/identity-photos.ts supplies image attributes from the manifest
used by the footer credits. Attribution and source/license records are in
video-source.json and photos-sources.json. Product imagery and artwork are
recorded in media/products/sources.json; project, story, and membership
provenance is stored in their respective media folders. Font licenses and
source records remain in public/preview/ai/fonts/.
Production build
npm run build
npm run check:site
npm run previewCloudflare Scripts
Use the package scripts for Pages Functions workflows:
npm run cf:dev
npm run cf:deploycf:dev: Builds the site and starts local Pages dev server fromdist/usingwrangler.jsonc.cf:deploy: Builds and deploysdist/to theabsmachCloudflare Pages project usingwrangler.jsonc.
Note: wrangler pages deploy does not accept compatibility flags as CLI arguments. Keep them in wrangler.jsonc and in Cloudflare Pages project settings.
wrangler.jsonc (project config):
name: Cloudflare Pages project name (the*.pages.devsubdomain).pages_build_output_dir: deploy output directory (./dist).compatibility_dateandcompatibility_flags(for examplenodejs_compat) for Functions runtime.vars: non-secret defaults for Functions (for contact form, useTEAM_CONTACT_EMAILandMAIL_FROM_EMAIL).
Wrangler automatically reads wrangler.jsonc when commands are run from the project root.
Contact Form API (Cloudflare Pages Function)
The contact page submits to POST /api/contact via src/pages/api/contact.js.
The endpoint uses nodemailer over SMTP (Google SMTP supported).
Each successful submission sends:
- one email to your team inbox (
TEAM_CONTACT_EMAIL) - one confirmation copy to the user who submitted the form email
Request payload fields:
nameemailmessage
Required environment variables:
SMTP_HOST: SMTP server host (for Google:smtp.gmail.com).SMTP_PORT: SMTP server port (465for SSL,587for STARTTLS).SMTP_SECURE:truewhen using SSL port (usually465), otherwisefalse.SMTP_USER: SMTP username (for Google: full Gmail/Workspace email).SMTP_PASS: SMTP password (for Google: app password).MAIL_FROM_EMAIL: From address used when sending both emails.TEAM_CONTACT_EMAIL: Team inbox that receives contact requests.
For local smtp4dev testing (Docker -p 2525:25), use:
SMTP_HOST=127.0.0.1
SMTP_PORT=2525
SMTP_SECURE=false
SMTP_USER=
SMTP_PASS=
MAIL_FROM_EMAIL=info@absmach.eu
TEAM_CONTACT_EMAIL=info@absmach.euSMTP_USER and SMTP_PASS are optional for local test servers.
For Cloudflare Pages production:
- Non-secret values are already in
wrangler.jsoncundervars:SMTP_HOST,SMTP_PORT,SMTP_SECURE,MAIL_FROM_EMAIL,TEAM_CONTACT_EMAIL. - Set only SMTP credentials as secrets on the project:
wrangler pages secret put SMTP_USER
wrangler pages secret put SMTP_PASSBackward compatibility: NO_REPLY_EMAIL, CONTACT_FROM_EMAIL, and CONTACT_TO_EMAIL are still accepted, but new projects should use MAIL_FROM_EMAIL and TEAM_CONTACT_EMAIL.
Production does not use .dev.vars.
.dev.varsis local-only forwrangler pages dev.- For production, configure values in Cloudflare Pages: Dashboard -> Pages -> your project -> Settings -> Variables and Secrets -> Production.
- No separate production env file is required in the repo.
For local Cloudflare Pages function testing, copy .dev.vars.example to .dev.vars and fill the values.
nodemailer requires Node compatibility in Cloudflare Workers. Enable nodejs_compat:
- In Cloudflare Pages project settings: Workers runtime compatibility flags.
- Or in local dev:
wrangler pages dev dist --compatibility-flag=nodejs_compat.
Images
Images are served from Cloudflare R2 (not committed to this repo) via
src/pages/img/[...path].ts, which keeps existing /img/... URLs working unchanged.
Maintainers publishing new/updated images: see scripts/README.md.
Blog
See WRITING.md for frontmatter and writing guidelines.
Sitemap / robots.txt
@astrojs/sitemapgeneratesdist/sitemap-index.xml(and chunk files likedist/sitemap-0.xml) duringnpm run build.src/pages/robots.txt.tsis prerendered as/robots.txtand points to/sitemap-index.xml.
RSS
src/pages/rss.xml.tsis prerendered as/rss.xml(blog feed).
Documentation
Legal document scope
The company website’s /terms/ covers website use, not all product contracts.
Atomic terms and privacy information remain on atomicapp.dev/legal/.
/privacy/ describes company-site visits and enquiries. /imprint/ identifies
the publisher and host. General and legal enquiries use info@absmach.eu; privacy
requests use privacy@absmach.eu. No voluntary uptime, support, return or warranty
period is offered by these website documents. Existing accepted customer agreements
are not amended by these edits.
Supplier transfer arrangements, actual mailbox/log retention and edge-injected tracking must be checked against production configuration. A public company business telephone remains to be supplied; the publisher’s private number is not published. These content corrections do not certify operational compliance.
Parts
26| Qty | Value | Footprint | References |
|---|---|---|---|
| 10 | r_generic_0603 | Resistor_SMD:R_0603_1608Metric | R_CC1, R_CC2, R1, R2, R3, R4, R5, R6, R7, R8 |
| 5 | c_generic_0805 | Capacitor_SMD:C_0805_2012Metric | C1, C2, C3, C4, C8 |
| 4 | c_generic_0603 | Capacitor_SMD:C_0603_1608Metric | C5, C6, C7, C9 |
| 1 | ams1117_3v3 | Package_TO_SOT_SMD:SOT-223-3_TabPin2 | U5 |
| 1 | atecc608 | Package_SO:SOIC-8_3.9x4.9mm_P1.27mm | U2 |
| 1 | balun_2g4 | RF_Converter:Johanson_0805 | BAL1 |
| 1 | bg95 | RF_Module:Quectel_BG95-M3 | U3 |
| 1 | bq24074 | Package_DFN_QFN:VQFN-16-1EP_3x3mm_P0.5mm_EP1.68x1.68mm | U4 |
| 1 | rp2350 | Package_DFN_QFN:QFN-56-1EP_7x7mm_P0.4mm_EP3.2x3.2mm | U1 |
| 1 | usb_c_receptacle | Connector_USB:USB_C_Receptacle_HRO_TYPE-C-31-M-12 | J1 |
Questions
How big is the Orbit board PCB?
It measures 92.5 × 53.4 mm and has 4 copper layers, 1.6 mm thick.
What parts does the Orbit board use?
26 parts, built around the RP2350A. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.
Where can I download the Orbit board KiCad files?
From the absmach/website repository on GitHub, at the commit this page was made from: the board is public/synth/orbit-board.kicad_pcb. PCBKit opens the board in the browser, with nothing to install.
Can I use the Orbit board design in my own project?
Its repository states no licence, so its author keeps all rights: ask absmach before reusing the design.
Similar boards
- 2 layers50 × 70 mm

- 2 layers54 × 85.6 mm

Board43
smartbank-inc/Board43
Board43 is an RP2350A-based microcontroller development board. Flash PicoRuby or your favorite firmware and start hacking.
583 parts30 - 2 layers96.8 × 91.4 mm

- 2 layers30.5 × 48.3 mm

Rp2350a testing
74th/rp2040-dev-board
治具には、中心から縦、横それぞれ 0.05 インチ単位で 0.200.50 インチ(1.27mm 単位で 5.08mm から 12.70mm)離れたとこにピンヘッダの固定用の穴が空いています。
46 parts21MIT - 4 layers22 × 22 mm

- 6 layers70 × 70 mm

Rp2350-decoder
mikesmitty/rp24-dcc-decoder
DIY DCC decoder for model railroad locomotives in an E24 form factor, powered by an RP2350 (Raspberry Pi Pico 2)
543 parts12 - 2 layers21 × 58 mm

PicoAlt
profdc9/PicoAlt2
An alternative Pi Pico 2 (RP2350) type board you can have made yourself.
42 parts11 - 4 layers40 × 40 mm

Enc encoder
ROAR-QUTRC/perseus-v3
The code base for the QUT Robotics Club ROAR teams rover Perseus starting 2026
87 parts10