Skip to the content
PCBKitNew board
4 layers92.5 × 53.4 mmOrbit board, the printed circuit board in 3D

Orbit board

absmach/website4

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

1

README

README.md

Abstract 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

bash
npm install
npm run dev

Astro 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

bash
npm run build
npm run check:site
npm run preview

Cloudflare Scripts

Use the package scripts for Pages Functions workflows:

bash
npm run cf:dev
npm run cf:deploy
  • cf:dev: Builds the site and starts local Pages dev server from dist/ using wrangler.jsonc.
  • cf:deploy: Builds and deploys dist/ to the absmach Cloudflare Pages project using wrangler.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.dev subdomain).
  • pages_build_output_dir: deploy output directory (./dist).
  • compatibility_date and compatibility_flags (for example nodejs_compat) for Functions runtime.
  • vars: non-secret defaults for Functions (for contact form, use TEAM_CONTACT_EMAIL and MAIL_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:

  • name
  • email
  • message

Required environment variables:

  • SMTP_HOST: SMTP server host (for Google: smtp.gmail.com).
  • SMTP_PORT: SMTP server port (465 for SSL, 587 for STARTTLS).
  • SMTP_SECURE: true when using SSL port (usually 465), otherwise false.
  • 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:

bash
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.eu

SMTP_USER and SMTP_PASS are optional for local test servers.

For Cloudflare Pages production:

  • Non-secret values are already in wrangler.jsonc under vars: SMTP_HOST, SMTP_PORT, SMTP_SECURE, MAIL_FROM_EMAIL, TEAM_CONTACT_EMAIL.
  • Set only SMTP credentials as secrets on the project:
bash
wrangler pages secret put SMTP_USER
wrangler pages secret put SMTP_PASS

Backward 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.vars is local-only for wrangler 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/sitemap generates dist/sitemap-index.xml (and chunk files like dist/sitemap-0.xml) during npm run build.
  • src/pages/robots.txt.ts is prerendered as /robots.txt and points to /sitemap-index.xml.

RSS

  • src/pages/rss.xml.ts is 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
QtyValueFootprintReferences
10r_generic_0603Resistor_SMD:R_0603_1608MetricR_CC1, R_CC2, R1, R2, R3, R4, R5, R6, R7, R8
5c_generic_0805Capacitor_SMD:C_0805_2012MetricC1, C2, C3, C4, C8
4c_generic_0603Capacitor_SMD:C_0603_1608MetricC5, C6, C7, C9
1ams1117_3v3Package_TO_SOT_SMD:SOT-223-3_TabPin2U5
1atecc608Package_SO:SOIC-8_3.9x4.9mm_P1.27mmU2
1balun_2g4RF_Converter:Johanson_0805BAL1
1bg95RF_Module:Quectel_BG95-M3U3
1bq24074Package_DFN_QFN:VQFN-16-1EP_3x3mm_P0.5mm_EP1.68x1.68mmU4
1rp2350Package_DFN_QFN:QFN-56-1EP_7x7mm_P0.4mm_EP3.2x3.2mmU1
1usb_c_receptacleConnector_USB:USB_C_Receptacle_HRO_TYPE-C-31-M-12J1

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 mmLcdtap rp2350, the printed circuit board in 3D

    Lcdtap rp2350

    shapoco/lcdtap

    A tool for mirroring or capturing I2C/SPI LCD displays

    100 parts85
  • 2 layers54 × 85.6 mmBoard43, the printed circuit board in 3D

    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 mmInkbadge, the printed circuit board in 3D

    Inkbadge

    cheyao/inkbadge

    Undercity eink PCB badges controlled by a rp2350

    98 parts22
  • 2 layers30.5 × 48.3 mmRp2350a testing, the printed circuit board in 3D

    Rp2350a testing

    74th/rp2040-dev-board

    治具には、中心から縦、横それぞれ 0.05 インチ単位で 0.200.50 インチ(1.27mm 単位で 5.08mm から 12.70mm)離れたとこにピンヘッダの固定用の穴が空いています。

    46 parts21MIT
  • 4 layers22 × 22 mmCycloMod, the printed circuit board in 3D

    CycloMod

    gsteiert/CycloMod

    Cyclone 10LP MicroMod Processor Board

    72 parts20CC0-1.0
  • 6 layers70 × 70 mmRp2350-decoder, the printed circuit board in 3D

    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 mmPicoAlt, the printed circuit board in 3D

    PicoAlt

    profdc9/PicoAlt2

    An alternative Pi Pico 2 (RP2350) type board you can have made yourself.

    42 parts11
  • 4 layers40 × 40 mmEnc encoder, the printed circuit board in 3D

    Enc encoder

    ROAR-QUTRC/perseus-v3

    The code base for the QUT Robotics Club ROAR teams rover Perseus starting 2026

    87 parts10