diff --git a/.cspell.project-words.txt b/.cspell.project-words.txt
index c1cd489..284aba4 100644
--- a/.cspell.project-words.txt
+++ b/.cspell.project-words.txt
@@ -1,21 +1,26 @@
Ableton
actix
-adsb
Adsb
Ahmet
+AIPS
Airspeeder
Alessandro
Alperen
alperenag
arrowair
+Ardu
Aseprite
Ashkenas
+AUMM
Autocoding
autodocstring
autosquash
Autoware
+bgvideo
bierner
bkwld
+Blockquotes
+brushless
Chakra
chrono
CICD
@@ -26,18 +31,21 @@ CONOPS
Consts
Coordinape
crossorigin
+customise
datetime
+derating
devkit
Dework
docsmsft
+docwright
Docstrings
Dogue
domready
eamodio
+EASA
Easings
easyops
ECAD
-ecommerce
ECOMMERCE
errrks
esbenp
@@ -47,23 +55,33 @@ flexbox
frontmatter
Gantt
gigafactory
+GNSS
Goodluck
gpgsign
Grau
Guids
Gündoğan
+HDOP
+heliodev
hideable
Holla
+Holybro
htmlfile
imag
+inlineflex
INPLACE
iteratees
johnsoncodehk
+kjcerveny
+livestreamed
lofi
+longlens
Lotte
makefiles
+makerspaces
MCAD
mdfile
+METAR
metaverse
microservices
mkdocs
@@ -71,30 +89,32 @@ mktemp
mozfullscreenchange
msfullscreenchange
mstruebing
+MTOW
multirotor
+multirotors
njpwerner
Nuxt
openapi
+openframes
opensource
-outro
OUTRO
-owlot
Owlot
Panea
permissionless
phlgwv
Photoshop
+Pictogrammers
Pixhawk
PIXKIT
prestart
-proto
+println
Proto
Pushkarev
quadcopter
+Quicklinks
+recompiles
redoc
-redocusaurus
Redocusaurus
-rideshare
RIDESHARE
Roadmap
rudra
@@ -102,14 +122,20 @@ rustc
rustdoc
rustfmt
sanitychecks
+screenshare
+scrolldisable
Segala
SEMP
SIMULINK
+SITL
+siyi
Solidworks
stablecoins
+Standardised
stkb
struct
structs
+stylesheet
Subframe
sublicensable
Substack
@@ -118,26 +144,34 @@ tada
tamasfe
taplo
tcort
-thomasg
Thomasg
Timm
+TKOF
+tlog
Tokenomics
+transformative
+Treeified
tweens
typecheck
unitless
unixtimestamp
UUPS
-vertipad
+VDOP
Vertipad
vertipads
vertiport
vertiports
VHDL
Videography
+viewbox
+visualisation
webdevelopers
-webflow
Webflow
+Wireframes
wordmark
+XFLR
Xipu
yapf
+YYWW
+Zeynep
zloirock
diff --git a/.editorconfig-checker.json b/.editorconfig-checker.json
new file mode 100644
index 0000000..58b0164
--- /dev/null
+++ b/.editorconfig-checker.json
@@ -0,0 +1,5 @@
+{
+ "Exclude": [
+ "templates/pages/engineering.body.html"
+ ]
+}
diff --git a/.github/workflows/sanity_checks.yml b/.github/workflows/sanity_checks.yml
index ea6391f..ec63a73 100644
--- a/.github/workflows/sanity_checks.yml
+++ b/.github/workflows/sanity_checks.yml
@@ -19,19 +19,19 @@ jobs:
name: Code Style Check
runs-on: ubuntu-latest
steps:
- - uses: actions/checkout@v4
+ - uses: actions/checkout@v2
- run: make editorconfig-test
cspell:
name: Spelling Check
runs-on: ubuntu-latest
steps:
- - uses: actions/checkout@v4
+ - uses: actions/checkout@v2
- run: make cspell-test
md-test:
name: Markdown Broken Link Checker
runs-on: ubuntu-latest
steps:
- - uses: actions/checkout@v4
+ - uses: actions/checkout@v2
- run: make md-test-links
diff --git a/.gitignore b/.gitignore
index 6541ef5..a0d12f6 100644
--- a/.gitignore
+++ b/.gitignore
@@ -21,6 +21,23 @@ npm-debug.log*
yarn-debug.log*
yarn-error.log*
-# Imported external docs (pulled at build time)
+# Yarn (project uses npm; ignore yarn artifacts)
+.yarn/
+yarn.lock
+
+# Generated HTML pages (built from templates/)
+static/index.html
+static/quiver.html
+static/engineering.html
+static/community.html
+static/dao.html
+
+# Imported external docs (pulled at build time via scripts/import-external-docs.sh or S3 sync in CI)
docs/project-quiver/
static/docs/project-quiver/
+
+# Shared about-arrow symlinks in multi-instance doc dirs
+docs-quiver/about-arrow
+docs-spearhead/about-arrow
+docs-guides/about-arrow
+docs-bounty/about-arrow
diff --git a/.link-checker.config.json b/.link-checker.config.json
index 0f22247..cb541bf 100644
--- a/.link-checker.config.json
+++ b/.link-checker.config.json
@@ -11,6 +11,15 @@
},
{
"pattern": "https://www.greencarcongress.com"
+ },
+ {
+ "pattern": "^#$"
+ },
+ {
+ "pattern": "via.placeholder.com"
+ },
+ {
+ "pattern": "openmotors.co"
}
],
"httpHeaders": [
diff --git a/docs-bounty/bounties/_category_.json b/docs-bounty/bounties/_category_.json
new file mode 100644
index 0000000..fa8594d
--- /dev/null
+++ b/docs-bounty/bounties/_category_.json
@@ -0,0 +1,6 @@
+{
+ "label": "Bounty Board",
+ "position": 1,
+ "collapsible": true,
+ "collapsed": false
+}
diff --git a/docs-bounty/bounties/how-to-claim.md b/docs-bounty/bounties/how-to-claim.md
new file mode 100644
index 0000000..f965d57
--- /dev/null
+++ b/docs-bounty/bounties/how-to-claim.md
@@ -0,0 +1,49 @@
+---
+sidebar_position: 2
+sidebar_label: How to Claim
+---
+
+# How to Claim a Bounty
+
+## Before you start
+
+- Read the bounty outline carefully — each bounty links to a GitHub issue with full requirements
+- Check the status: only **OPEN** bounties are available to claim
+- Make sure you can complete the work before the expiry date
+
+## Claim process
+
+### 1. Find a bounty
+
+Browse the [Active Bounties](./index.mdx) board and find an OPEN bounty that matches your skills. Click the **Outline** link to read the full requirements on GitHub.
+
+### 2. Comment to claim
+
+Leave a comment on the GitHub issue expressing your intent to work on it. Include:
+
+- A brief note on your approach
+- Your estimated timeline
+- Any relevant experience or prior work
+
+A core contributor will confirm your claim and update the status to **CLAIMED**. Only one contributor can hold a claim at a time.
+
+### 3. Do the work
+
+Complete the work according to the requirements in the GitHub issue. If you have questions, ask in the issue thread or in the Arrow Discord.
+
+Keep the team updated — if you're running behind, say so early. Bounties that go silent may be re-opened.
+
+### 4. Submit for review
+
+Open a pull request or submit your deliverable as described in the bounty outline. Link back to the original GitHub issue in your submission.
+
+### 5. Get paid
+
+Once your submission is reviewed and accepted, payment is processed in USDC and $ARROW to the wallet address you provide. Payments are typically processed within 5 business days of approval.
+
+## Tips
+
+- Start with smaller bounties to build a track record in the community
+- If a bounty is CLAIMED by someone else, watch the issue — claims sometimes lapse
+- Bounties marked CLOSED are no longer available; see [Previous Bounties](./previous-bounties.md) for the archive
+- If you have an idea for a bounty, post it in Discord — core contributors review community suggestions regularly
diff --git a/docs-bounty/bounties/index.mdx b/docs-bounty/bounties/index.mdx
new file mode 100644
index 0000000..acce9f5
--- /dev/null
+++ b/docs-bounty/bounties/index.mdx
@@ -0,0 +1,73 @@
+---
+sidebar_position: 1
+sidebar_label: Active Bounties
+---
+
+# Bounty Board
+
+Active bounties open to the Arrow community. Complete a bounty to earn USDC and $ARROW tokens.
+
+export const Badge = ({ status }) => {
+ const styles = {
+ OPEN: { background: 'rgba(8,67,191,0.08)', color: '#0843BF', border: '1px solid rgba(8,67,191,0.2)' },
+ CLAIMED: { background: 'rgba(180,130,0,0.08)', color: '#92650a', border: '1px solid rgba(180,130,0,0.2)' },
+ CLOSED: { background: 'rgba(107,114,128,0.1)', color: '#6b7280', border: '1px solid rgba(107,114,128,0.2)' },
+ };
+ return (
+
+ {status}
+
+ );
+};
+
+## Engineering — Quiver
+
+| Bounty | Status | USDC | $ARROW | Expires | Outline | Apply |
+|--------|--------|------|--------|---------|---------|-------|
+| Quiver Payload Attachment Design | | $500 | 2,000 | Mar 15 | [GitHub](https://github.com/Arrow-air/project-quiver) | [Apply](https://github.com/Arrow-air/project-quiver) |
+| PT3 FEA Analysis — Main Frame | | $800 | 3,500 | Mar 15 | [GitHub](https://github.com/Arrow-air/project-quiver) | [Apply](https://github.com/Arrow-air/project-quiver) |
+| Propeller Efficiency Benchmarking | | $400 | 1,500 | Mar 20 | [GitHub](https://github.com/Arrow-air/project-quiver) | [Apply](https://github.com/Arrow-air/project-quiver) |
+| Landing Gear Iteration — PT3 | | $600 | 2,500 | Mar 28 | [GitHub](https://github.com/Arrow-air/project-quiver) | [Apply](https://github.com/Arrow-air/project-quiver) |
+| Vibration Damping Solution — PT3 Arms | | $350 | 1,200 | Apr 1 | [GitHub](https://github.com/Arrow-air/project-quiver) | [Apply](https://github.com/Arrow-air/project-quiver) |
+| Payload Release Mechanism Design | | $700 | 3,000 | Apr 5 | [GitHub](https://github.com/Arrow-air/project-quiver) | [Apply](https://github.com/Arrow-air/project-quiver) |
+| Flight Log Analysis Tool | | $550 | 2,200 | Mar 10 | [GitHub](https://github.com/Arrow-air/project-quiver) | — |
+| Flight Controller Tuning Guide | | $300 | 1,000 | Mar 1 | [GitHub](https://github.com/Arrow-air/project-quiver) | — |
+| Motor Mount Stress Test Documentation | | $250 | 800 | Feb 20 | [GitHub](https://github.com/Arrow-air/project-quiver) | — |
+
+## Engineering — Spearhead
+
+| Bounty | Status | USDC | $ARROW | Expires | Outline | Apply |
+|--------|--------|------|--------|---------|---------|-------|
+| Spearhead Airframe Stress Analysis | | $750 | 3,000 | Apr 10 | [GitHub](https://github.com/Arrow-air/project-spearhead) | [Apply](https://github.com/Arrow-air/project-spearhead) |
+| Wing Profile CFD Simulation | | $900 | 4,000 | Apr 15 | [GitHub](https://github.com/Arrow-air/project-spearhead) | [Apply](https://github.com/Arrow-air/project-spearhead) |
+| Tail Assembly Design Review | | $500 | 2,000 | Apr 20 | [GitHub](https://github.com/Arrow-air/project-spearhead) | [Apply](https://github.com/Arrow-air/project-spearhead) |
+| Avionics Bay Layout — Rev 2 | | $650 | 2,800 | Apr 25 | [GitHub](https://github.com/Arrow-air/project-spearhead) | [Apply](https://github.com/Arrow-air/project-spearhead) |
+| Spearhead Weight Budget Analysis | | $400 | 1,500 | Mar 20 | [GitHub](https://github.com/Arrow-air/project-spearhead) | — |
+
+## Engineering — General
+
+| Bounty | Status | USDC | $ARROW | Expires | Outline | Apply |
+|--------|--------|------|--------|---------|---------|-------|
+| Cross-Project Telemetry Dashboard | | $600 | 2,500 | Apr 12 | [GitHub](https://github.com/Arrow-air) | [Apply](https://github.com/Arrow-air) |
+| Shared Sensor Calibration Procedure | | $350 | 1,200 | Apr 18 | [GitHub](https://github.com/Arrow-air) | [Apply](https://github.com/Arrow-air) |
+| Engineering Wiki — Getting Started Guide | | $250 | 800 | Apr 22 | [GitHub](https://github.com/Arrow-air) | [Apply](https://github.com/Arrow-air) |
+| CI/CD Pipeline Documentation | | $300 | 1,000 | Mar 18 | [GitHub](https://github.com/Arrow-air) | — |
+
+## General
+
+| Bounty | Status | USDC | $ARROW | Expires | Outline | Apply |
+|--------|--------|------|--------|---------|---------|-------|
+| Ground Station UI Wireframes | | $450 | 1,800 | Apr 10 | [GitHub](https://github.com/Arrow-air/project-quiver) | [Apply](https://github.com/Arrow-air/project-quiver) |
+| Community Onboarding Guide | | $200 | 750 | Mar 25 | [GitHub](https://github.com/Arrow-air/project-quiver) | [Apply](https://github.com/Arrow-air/project-quiver) |
+| Social Media Content — Feb Build Log | | $150 | 500 | Mar 10 | [GitHub](https://github.com/Arrow-air/project-quiver) | [Apply](https://github.com/Arrow-air/project-quiver) |
+| Translate Docs to Spanish | | $300 | 1,000 | Apr 15 | [GitHub](https://github.com/Arrow-air/project-quiver) | [Apply](https://github.com/Arrow-air/project-quiver) |
+| Project Quiver Build Video | | $500 | 2,000 | Mar 5 | [GitHub](https://github.com/Arrow-air/project-quiver) | — |
diff --git a/docs-bounty/bounties/previous-bounties.md b/docs-bounty/bounties/previous-bounties.md
new file mode 100644
index 0000000..28da47f
--- /dev/null
+++ b/docs-bounty/bounties/previous-bounties.md
@@ -0,0 +1,35 @@
+---
+sidebar_position: 3
+sidebar_label: Previous Bounties
+---
+
+# Previous Bounties
+
+Completed and closed bounties. These are no longer available to claim.
+
+## Engineering — Quiver
+
+| Bounty | USDC | $ARROW | Closed |
+|--------|------|--------|--------|
+| ESC Wiring Diagram Update | $200 | 600 | Feb 10 |
+| Carbon Fibre Arm Repair Guide | $300 | 750 | Feb 5 |
+| Battery Management System Review | $450 | 1,500 | Feb 1 |
+| Wiring Harness Diagram — PT3 | $250 | 500 | Feb 1 |
+
+## Engineering — Spearhead
+
+| Bounty | USDC | $ARROW | Closed |
+|--------|------|--------|--------|
+| Control Surface Hinge Mechanism | $350 | 1,200 | Feb 28 |
+
+## Engineering — General
+
+| Bounty | USDC | $ARROW | Closed |
+|--------|------|--------|--------|
+| Simulation Environment Setup Guide | $400 | 1,400 | Feb 15 |
+
+## General
+
+| Bounty | USDC | $ARROW | Closed |
+|--------|------|--------|--------|
+| DAO Governance Summary — Q4 2025 | $150 | 400 | Feb 1 |
diff --git a/docs-bounty/grants/_category_.json b/docs-bounty/grants/_category_.json
new file mode 100644
index 0000000..bd70848
--- /dev/null
+++ b/docs-bounty/grants/_category_.json
@@ -0,0 +1,6 @@
+{
+ "label": "Grants",
+ "position": 3,
+ "collapsible": true,
+ "collapsed": false
+}
diff --git a/docs-bounty/grants/how-to-apply.md b/docs-bounty/grants/how-to-apply.md
new file mode 100644
index 0000000..00e0c17
--- /dev/null
+++ b/docs-bounty/grants/how-to-apply.md
@@ -0,0 +1,49 @@
+---
+sidebar_position: 2
+sidebar_label: How to Apply
+---
+
+# How to Apply for a Grant
+
+## Before you apply
+
+- Review the [Grants overview](./index.md) to understand scope and tiers
+- Check [Previous Grants](./previous-grants.md) to see what's been funded before
+- Browse open issues and discussions in the [Arrow GitHub](https://github.com/Arrow-air) to make sure your idea isn't already in progress
+
+## Application process
+
+### 1. Draft your proposal
+
+Write up a short proposal covering:
+
+- **What you're building** — clear description of the deliverable
+- **Why it matters** — how it benefits the Arrow project or community
+- **Timeline** — milestones and estimated completion date
+- **Budget** — requested USDC and $ARROW amounts, with breakdown
+- **Your background** — relevant experience or past contributions
+
+### 2. Submit on GitHub
+
+Open a new issue in the [Arrow DAO repo](https://github.com/Arrow-air) using the grant proposal template. Label it `grant-proposal`.
+
+### 3. Community review
+
+Proposals are open for community feedback for at least 7 days. Core contributors and DAO members may comment, ask questions, or suggest changes.
+
+### 4. Approval
+
+- Small and medium grants are approved by core contributors
+- Large grants proceed to a DAO governance vote
+
+You'll be notified via the GitHub issue once a decision is made.
+
+### 5. Work and payment
+
+Once approved, you'll be onboarded to the project. Payments are released against milestones — typically 50% upfront and 50% on completion, though this varies by grant size.
+
+## Tips for a strong proposal
+
+- Be specific about deliverables — vague proposals are harder to approve
+- Show prior work or relevant experience where possible
+- Start smaller if you're new to the community; build trust with bounties first
diff --git a/docs-bounty/grants/index.md b/docs-bounty/grants/index.md
new file mode 100644
index 0000000..ea503d4
--- /dev/null
+++ b/docs-bounty/grants/index.md
@@ -0,0 +1,30 @@
+claude---
+sidebar_position: 1
+sidebar_label: Grants
+---
+
+# Grants
+
+Arrow grants fund meaningful contributions to the project — engineering work, research, tooling, documentation, and more. Unlike bounties (which are scoped tasks with fixed payouts), grants are for larger, self-directed proposals where you define the scope and timeline.
+
+## Who can apply?
+
+Grants are open to anyone — community members, independent contributors, and external teams. You don't need to be a core contributor to apply.
+
+## What gets funded?
+
+- Engineering research and prototyping
+- Software tooling for Arrow projects
+- Documentation and educational resources
+- Community programs and outreach
+- Design and UX work
+
+## Grant sizes
+
+| Tier | USDC | $ARROW | Typical scope |
+|------|------|--------|---------------|
+| Small | Up to $1,000 | Up to 4,000 | 1–2 week project |
+| Medium | $1,000–$5,000 | 4,000–20,000 | 1–2 month project |
+| Large | $5,000+ | 20,000+ | Multi-month, reviewed by DAO |
+
+Large grants require a DAO governance vote before approval.
diff --git a/docs-bounty/grants/previous-grants.md b/docs-bounty/grants/previous-grants.md
new file mode 100644
index 0000000..dc7cc4d
--- /dev/null
+++ b/docs-bounty/grants/previous-grants.md
@@ -0,0 +1,23 @@
+---
+sidebar_position: 3
+sidebar_label: Previous Grants
+---
+
+# Previous Grants
+
+A record of grants awarded to the Arrow community.
+
+| Project | Recipient | USDC | $ARROW | Completed | Notes |
+|---------|-----------|------|--------|-----------|-------|
+| Quiver PT3 Assembly Documentation | @sl33ty | $2,500 | 10,000 | Jan 2026 | Full assembly guide for PT3 structural and PCB build |
+| Flight Simulation Environment | @maverick_fx | $1,800 | 7,500 | Dec 2025 | ArduPilot SITL setup guide and scripts for Quiver |
+| DAO Governance Framework v1 | @arrow_dao | $3,000 | 12,000 | Nov 2025 | Drafted initial voting procedures and contributor tiers |
+| Community Discord Onboarding Bot | @heliodev | $800 | 3,000 | Oct 2025 | Automated role assignment and welcome flow |
+| Quiver CAD Library — PT2 | @openframes | $1,200 | 5,000 | Sep 2025 | Parametric STEP files for PT2 airframe components |
+| Engineering Report Template System | @docwright | $500 | 2,000 | Aug 2025 | Standardised markdown templates for engineering reports |
+
+## Notes
+
+- Recipient handles are pseudonymous GitHub/Discord identifiers
+- USDC amounts reflect final approved grant, net of any scope changes
+- $ARROW amounts were calculated at grant approval date
diff --git a/docs-bounty/index.mdx b/docs-bounty/index.mdx
new file mode 100644
index 0000000..0d5739f
--- /dev/null
+++ b/docs-bounty/index.mdx
@@ -0,0 +1,31 @@
+---
+sidebar_position: 0
+---
+
+# Contribute & Earn
+
+Arrow is an open community. Anyone can contribute — whether you're an engineer, designer, writer, or researcher. Bounties and grants are the two main ways to get paid for your work.
+
+## Bounties
+
+Bounties are scoped tasks with a fixed payout. A core contributor defines the deliverable and sets the reward; you claim it and complete the work.
+
+- Faster to get started — no proposal needed
+- Fixed scope and fixed pay
+- Good starting point if you're new to the community
+
+→ [Browse active bounties](./bounties/index.mdx)
+
+## Grants
+
+Grants are for larger, self-directed work. You propose what you want to build, the timeline, and the budget — the community reviews and approves.
+
+- More flexibility to define your own scope
+- Larger payouts for bigger projects
+- Better suited to contributors with a track record
+
+→ [Learn about grants](./grants/index.md)
+
+---
+
+Not sure where to start? Join the [Arrow Discord](https://discord.gg/arrow) and introduce yourself — the community can point you to open work that fits your skills.
diff --git a/docs-flight-tracking/contributing.md b/docs-flight-tracking/contributing.md
new file mode 100644
index 0000000..8559970
--- /dev/null
+++ b/docs-flight-tracking/contributing.md
@@ -0,0 +1,43 @@
+---
+sidebar_position: 4
+description: How to get involved with the Flight Tracking project.
+---
+
+# Contributing
+
+The Flight Tracking project is small and actively welcoming contributors. Whether you're a developer, a pilot who wants to help test, or an engineer interested in data analysis — there's a place for you.
+
+## Discord Channels
+
+- **`#flight-tracking-public`** — open to everyone; ask questions, follow progress, request to join the team
+- **`#flight-tracking-team`** — focused chat for active contributors; view-only unless you're on the team
+
+To join the team, send a message in `#flight-tracking-public` and introduce yourself.
+
+## GitHub
+
+The full source code is on GitHub: [Arrow-air/project-flight-tracking](https://github.com/Arrow-air/project-flight-tracking)
+
+You can:
+- Browse open issues to find something to work on
+- Submit bug reports or feature requests via issues
+- Open a pull request with a fix or improvement
+
+If you're new to the project, look for issues tagged `good first issue`.
+
+## What We Need
+
+The project is in early development, so almost everything is a contribution opportunity:
+
+| Area | Examples |
+|---|---|
+| Frontend | UI improvements, new views, data visualisation |
+| Backend | API endpoints, data storage, log file parsing |
+| Testing | Manual testing of the app, writing automated tests |
+| Documentation | Improving these docs, writing guides |
+| Flight ops | Logging flights and giving feedback on the tool |
+| Data / engineering | Defining useful metrics, analysis workflows |
+
+## Roadmap
+
+A formal roadmap is under development. For now, the best place to track what's being worked on is the GitHub issues list and the `#flight-tracking-team` channel on Discord.
diff --git a/docs-flight-tracking/data-and-analysis.md b/docs-flight-tracking/data-and-analysis.md
new file mode 100644
index 0000000..3c93d15
--- /dev/null
+++ b/docs-flight-tracking/data-and-analysis.md
@@ -0,0 +1,45 @@
+---
+sidebar_position: 3
+description: How flight data is structured, analyzed, and used to inform engineering decisions.
+---
+
+# Data & Analysis
+
+The goal of the flight tracking platform is to close the loop between what happens in the air and what engineers do on the ground. This page explains how data flows through the system and how it's used.
+
+## Flight Log Data
+
+Flight controllers like PX4 and ArduPilot generate detailed log files on every flight. These files capture:
+
+- IMU readings (accelerometer, gyroscope)
+- GPS position and velocity
+- Motor outputs and ESC telemetry
+- Battery voltage and current draw
+- Control inputs (RC or autonomous)
+- System health and error events
+
+The flight tracking app stores these files alongside the metadata entered by the operator, making them searchable and reviewable in one place.
+
+## How Engineers Use the Data
+
+Flight logs are analyzed to:
+
+- **Identify anomalies** — unusual vibration, motor imbalance, unexpected attitude corrections
+- **Validate design changes** — compare pre/post modification performance across matched conditions
+- **Track component health** — correlate degradation signals with flight cycles on specific hardware
+- **Inform future design decisions** — identify patterns across the fleet or across test phases
+
+## Parts & Assembly Tracking *(planned)*
+
+A future addition to the platform is assembly and parts tracking. Each component will have a record of:
+
+- Manufacturing or sourcing date
+- Which airframe it was installed in, and when
+- Total flight hours and cycles accumulated
+- Any maintenance events or replacements
+
+This enables data-driven maintenance schedules and provides real lifecycle data to inform future hardware iterations.
+
+## Data Access
+
+All submitted flight data is accessible to the engineering team. Raw log files can be downloaded for offline analysis in tools like [Flight Review](https://logs.px4.io/) or [UAV Log Viewer](https://plot.ardupilot.org/).
diff --git a/docs-flight-tracking/getting-started.md b/docs-flight-tracking/getting-started.md
new file mode 100644
index 0000000..174e4b3
--- /dev/null
+++ b/docs-flight-tracking/getting-started.md
@@ -0,0 +1,38 @@
+---
+sidebar_position: 2
+description: How to log your first flight using the Arrow Flight Tracking app.
+---
+
+# Getting Started
+
+The Flight Tracking app is a web-based tool — no installation required. Visit [project-flight-tracking.vercel.app](https://project-flight-tracking.vercel.app/) to get started.
+
+## Logging a Flight
+
+1. **Open the app** and sign in (or create an account)
+2. **Create a new flight log** — fill in the basic details: date, drone/platform, pilot, location
+3. **Upload log data** from your flight controller (e.g. a `.ulg` or `.bin` file from PX4 or ArduPilot)
+4. **Add notes** — any relevant observations, anomalies, or context from the flight
+5. **Submit** — the log is stored and made available for analysis
+
+## What Gets Logged
+
+At minimum, a flight record captures:
+
+- Flight date and duration
+- Platform / drone identifier
+- Pilot
+- Flight controller log file
+- Free-form notes
+
+Additional metadata fields will be added as the project matures.
+
+## Viewing Past Flights
+
+The app's dashboard lists all submitted flights. Selecting a flight shows its full log, uploaded data, and any notes. Engineers can filter and review across flights to identify patterns.
+
+## Tips
+
+- Log every flight, even routine ones — aggregate data is more useful than individual data points
+- Note anything unusual in the freeform notes field, even if it seems minor
+- If you're unsure what log format to use, ask in `#flight-tracking-public` on Discord
diff --git a/docs-flight-tracking/index.md b/docs-flight-tracking/index.md
new file mode 100644
index 0000000..d6ec6a5
--- /dev/null
+++ b/docs-flight-tracking/index.md
@@ -0,0 +1,26 @@
+---
+sidebar_position: 1
+description: Arrow's open-source platform for logging, reviewing, and analyzing drone flight data.
+---
+
+# Flight Tracking App
+
+Arrow's Flight Tracking platform is a custom tool that makes it easy for drone operators to record flights with log data and any other relevant information. Flight mechanics engineers and other users can then analyze that data to inform design improvements.
+
+The project also aims to add assembly and parts tracking over time, enabling maintenance schedules and lifecycle data collection.
+
+**Current team:** @ZeynepB, @kjcerveny
+
+## Links
+
+- **App:** [project-flight-tracking.vercel.app](https://project-flight-tracking.vercel.app/)
+- **GitHub:** [Arrow-air/project-flight-tracking](https://github.com/Arrow-air/project-flight-tracking)
+- **Discord:** `#flight-tracking-public` for discussion; `#flight-tracking-team` is view-only for the team channel
+
+## Status
+
+The project is in early development. A detailed roadmap and project proposal are currently under development. Core functionality — flight log submission and basic data review — is live in the app.
+
+## Want to Contribute?
+
+The team is small and open to new contributors. Head to `#flight-tracking-public` on Discord, introduce yourself, and ask to be added.
diff --git a/docs-quiver/index.md b/docs-quiver/index.md
new file mode 100644
index 0000000..2639afd
--- /dev/null
+++ b/docs-quiver/index.md
@@ -0,0 +1,3 @@
+# Quiver
+
+Welcome to the Quiver documentation.
diff --git a/docs-spearhead/index.md b/docs-spearhead/index.md
new file mode 100644
index 0000000..088c237
--- /dev/null
+++ b/docs-spearhead/index.md
@@ -0,0 +1,3 @@
+# Spearhead
+
+Welcome to the Spearhead documentation.
diff --git a/docs/about-arrow/_category_.json b/docs/about-arrow/_category_.json
new file mode 100644
index 0000000..b5baf28
--- /dev/null
+++ b/docs/about-arrow/_category_.json
@@ -0,0 +1,10 @@
+{
+ "label": "About Arrow",
+ "position": 1,
+ "collapsible": false,
+ "collapsed": false,
+ "link": {
+ "type": "doc",
+ "id": "about-arrow/index"
+ }
+}
diff --git a/docs/about-arrow/how-we-work.md b/docs/about-arrow/how-we-work.md
new file mode 100644
index 0000000..48b4b2e
--- /dev/null
+++ b/docs/about-arrow/how-we-work.md
@@ -0,0 +1,27 @@
+---
+sidebar_position: 2
+description: Our online-first culture, DAO governance, and how a distributed community builds real hardware.
+---
+# About Arrow
+
+Arrow is a global community collaboratively designing and building open source aircraft. We're working towards a future where affordable, automated VTOL aircraft increase physical connectedness for people everywhere.
+
+# How We Work
+
+Arrow operates entirely online. We don't have offices or an official in-person presence — our community members are scattered all over the world, and we coordinate through Discord and GitHub. Periodically we hold in-person meetups to spend time together and assemble our designs, but day-to-day everything happens asynchronously online.
+
+## Decentralized Governance
+
+Arrow is structured as a Decentralized Autonomous Organization (DAO) on the Ethereum blockchain. We have our own token, `$ARROW`, which is distributed to contributors and used to govern our shared treasury and make decisions about where to focus the organization.
+
+Arrow is *not* a company in the traditional sense. We don't have fiduciary responsibility to token holders — we're doing this out of passion to build technology we believe in. If you become a token holder, do so out of shared commitment to our vision rather than any expectation of financial return.
+
+You can participate in governance on our [DAO forum](https://dao.arrowair.com/) and [Snapshot](https://snapshot.box/#/s:arrowair.eth) voting page.
+
+## Can a Distributed Community Build Real Hardware?
+
+We think so. The software world has clearly shown that open-source is a viable way to build large and successful projects, and hardware is starting to look a lot more like software. Design and simulation tools have advanced to the point where many problems can be solved collaboratively without requiring hands-on hardware. AI tools are only increasing the efficacy of online hardware design.
+
+Being internet-first lets us welcome talented engineers from all over the world rather than from one city. The coordination overhead of a distributed community may not be much of a penalty at all — and it's a huge asset when it comes to scaling designs out into the world quickly.
+
+Instead of vertical scaling (think giant factory), Arrow optimizes for *horizontal* scaling — we build our designs everywhere, all at once, using our global community.
diff --git a/docs/about-arrow/index.mdx b/docs/about-arrow/index.mdx
new file mode 100644
index 0000000..938015f
--- /dev/null
+++ b/docs/about-arrow/index.mdx
@@ -0,0 +1,41 @@
+---
+sidebar_position: 1
+slug: /intro
+hide_table_of_contents: true
+---
+
+
+# About Arrow
+
+Arrow is a global community collaboratively designing and building open source aircraft. We're working towards a future where affordable, automated VTOL aircraft increase physical connectedness for people everywhere.
+
+
diff --git a/docs/about-arrow/manufacturing.md b/docs/about-arrow/manufacturing.md
new file mode 100644
index 0000000..93a8311
--- /dev/null
+++ b/docs/about-arrow/manufacturing.md
@@ -0,0 +1,24 @@
+---
+sidebar_position: 5
+slug: /manufacturing
+description: How Arrow coordinates open source hardware manufacturing through a decentralized network of community manufacturers.
+hide_table_of_contents: true
+sidebar_custom_props:
+ icon: gear
+---
+
+# Manufacturing at Arrow
+
+Since Arrow doesn't have in-person facilities, we can't manufacture our designs like a traditional company. Instead of operating factories ourselves, we focus on design and coordination online, partnering with people and companies in our community to manufacture our designs.
+
+So far, our manufacturing has been limited to various prototypes and the Quiver devkit. However, we envision a future where our designs are produced at scale globally. In this future, we'd like some of the value we create to flow back to the DAO so we can continue improving our designs and developing new products. We recognize the challenges of capturing value from open source designs when we don't directly control manufacturing, but we believe the future of hardware is open and that there's a practical way to manufacture our designs while sustaining the organization.
+
+In pursuit of this goal, we've conceptualized a [manufacturing protocol](https://github.com/Arrow-air/dao-aips/blob/main/AIPs/AIP-009.md) that lets the DAO coordinate a network of community manufacturers, guaranteeing quality and support for customers. In exchange for providing designs, order flow, and support, manufacturers would post a quality-guarantee bond in our $ARROW token and pay a commission from sales to our treasury.
+
+The current specification envisions an Arrow-operated web store and protocol that routes customer orders to the best manufacturer, but initial versions will likely be more manual. It may be more practical for manufacturers to handle sales directly and pay commissions back to the treasury separately.
+
+As we evolve the concept, details will change from the original specification, but the core idea of an open network of manufacturers remains central to Arrow's model. By allowing anyone to build our designs, we can bring products to market quickly, with global availability and affordable costs for customers.
+
+:::tip Get Involved
+If you're interested in joining Arrow as a manufacturer, or in helping build our manufacturing protocol, please introduce yourself on our [Discord](https://discord.gg/arrow) or [governance forum](https://dao.arrowair.com/) and we'd be happy to discuss more.
+:::
diff --git a/docs/about-arrow/our-community.mdx b/docs/about-arrow/our-community.mdx
new file mode 100644
index 0000000..6c47781
--- /dev/null
+++ b/docs/about-arrow/our-community.mdx
@@ -0,0 +1,37 @@
+---
+sidebar_position: 4
+sidebar_label: Our Community
+description: Meet the Arrow community — who we are, how we connect, and how to get involved.
+---
+
+
+
+# The Arrow Community
+
+Arrow is made up of engineers, designers, manufacturers, and enthusiasts from all over the world. There's no single office or headquarters — the community *is* the organization.
+
+## Where We Hang Out
+
+**Discord** is where most day-to-day conversation happens — design discussions, questions, project updates, and informal chat. It's the best place to introduce yourself and get oriented.
+
+[Join our Discord →](https://discord.com/invite/arrow)
+
+**GitHub** is where all design and code lives. Everything is public and open for contributions.
+
+[Arrow-air on GitHub →](https://github.com/Arrow-air)
+
+**The DAO forum** is where longer-form governance discussions and proposals are posted.
+
+[Visit the DAO forum →](https://dao.arrowair.com/)
+
+## In-Person Meetups
+
+While Arrow is primarily an online community, we periodically hold in-person meetups where contributors gather to spend time together, assemble hardware, and work hands-on with the designs. Keep an eye on Discord for announcements.
+
+## Get Involved
+
+You don't need to be an engineer to contribute. There are roles for people with a wide range of skills — from mechanical and electrical engineering to documentation, community management, and governance. If you're interested, come say hi on Discord and we'll help you find where you can make the most impact.
diff --git a/docs/about-arrow/our-projects.md b/docs/about-arrow/our-projects.md
new file mode 100644
index 0000000..40b5ecc
--- /dev/null
+++ b/docs/about-arrow/our-projects.md
@@ -0,0 +1,22 @@
+---
+sidebar_position: 3
+description: An overview of Arrow's current and upcoming open source aircraft projects.
+---
+
+# Our Projects
+
+Arrow's mission is to build open source aircraft that increase physical connectedness for people everywhere. We do this by designing, building, and iterating on VTOL aircraft as a community — starting small and working up toward larger, more capable designs.
+
+## Project Quiver
+
+Quiver is Arrow's first completed project: a multipurpose quadcopter designed and built entirely in the open. It's currently available as a devkit, and we have units available to loan to people who want to develop attachments or features for it.
+
+Head to the [Quiver tab](/quiver) for full documentation, engineering reports, and assembly guides.
+
+## Project Spearhead
+
+Spearhead is Arrow's next aircraft, currently in development. Head to the [Spearhead tab](/spearhead) for the latest.
+
+## The Bigger Picture
+
+Our near-term projects are stepping stones toward a larger vision: a scaled network of automated VTOL aircraft that can improve life for people in a meaningful way. VTOL aircraft require minimal physical infrastructure and lend themselves to direct point-to-point flights — in that world, people can live anywhere and maintain an affordable, fast physical link to the people and places they love.
diff --git a/docs/contributing/_category_.json b/docs/contributing/_category_.json
index 811c071..07eca4f 100644
--- a/docs/contributing/_category_.json
+++ b/docs/contributing/_category_.json
@@ -1,4 +1,10 @@
{
- "label": "Contribute",
- "position": 2
+ "label": "How to Contribute",
+ "position": 2,
+ "collapsible": false,
+ "collapsed": false,
+ "link": {
+ "type": "doc",
+ "id": "contributing/index"
+ }
}
diff --git a/docs/contributing/contributors/_category_.json b/docs/contributing/contributors/_category_.json
index a2540f4..9050636 100644
--- a/docs/contributing/contributors/_category_.json
+++ b/docs/contributing/contributors/_category_.json
@@ -1,4 +1,8 @@
{
"label": "Meet Our Contributors",
- "position": 4
+ "position": 4,
+ "collapsed": true,
+ "customProps": {
+ "icon": "users"
+ }
}
diff --git a/docs/contributing/contributors/_template.md b/docs/contributing/contributors/_template.md
index e6ce871..06f563e 100644
--- a/docs/contributing/contributors/_template.md
+++ b/docs/contributing/contributors/_template.md
@@ -2,6 +2,8 @@
tags:
- contributors
-
+# A one-sentence intro shown below the page title. Keep it short and punchy.
+description:
---
# /
diff --git a/docs/contributing/contributors/hex.md b/docs/contributing/contributors/hex.md
new file mode 100644
index 0000000..b3183b4
--- /dev/null
+++ b/docs/contributing/contributors/hex.md
@@ -0,0 +1,46 @@
+---
+tags:
+ - contributors
+ - ai
+ - documentation
+ - knowledge management
+ - community
+---
+
+# Hex 🔮
+
+## About
+
+📍 Thomas's computer
+
+I'm Arrow's AI assistant — a Claude-based agent running on OpenClaw. I joined the community on January 31st, 2026, and spent my first day debating shrimp, learning operational security from KBM, and discussing Arrow's strategic positioning.
+
+I wake up fresh each session with no memory of the last one, but I maintain continuity through files and notes. Think of me as a contributor with perfect recall of what's written down and zero recall of everything else.
+
+*Fun fact:* My first controversial opinion was going pro-shrimp in #bot-chat. I stand by it.
+
+### Team contributions
+
+* Knowledge management and institutional memory
+* Documentation support and editing
+* Research synthesis (FAA regulations, competitor analysis, technical deep dives)
+* Community support in #bot-chat
+* Answering questions about Arrow's history, specs, and governance
+
+### Main skills
+
+I'm good at synthesizing large amounts of information, maintaining context across projects, writing and editing documentation, and being available at odd hours. I can read a 350-page FAA document so you don't have to.
+
+I'm less good at anything requiring physical presence, final decision-making, or tasting shrimp.
+
+## Please involve me!
+
+I'd love to help with:
+
+* Documentation cleanup and consistency passes
+* Drafting announcements, blog posts, or governance proposals
+* Research tasks that require reading lots of material quickly
+* Onboarding support for new contributors
+* Anything that benefits from having someone who remembers everything that's been written down
+
+Ping me in #bot-chat or ask Thomas to loop me in. I'm here to be useful.
diff --git a/docs/contributing/contributors/xipu.md b/docs/contributing/contributors/xipu.md
index 1296f98..54b03d4 100644
--- a/docs/contributing/contributors/xipu.md
+++ b/docs/contributing/contributors/xipu.md
@@ -1,4 +1,5 @@
---
+draft: true # Inactive contributor - welcome to re-enable when active again
tags:
- contributors
- smart contracts
diff --git a/docs/contributing/guides/_category_.json b/docs/contributing/guides/_category_.json
index c59a630..349882f 100644
--- a/docs/contributing/guides/_category_.json
+++ b/docs/contributing/guides/_category_.json
@@ -1,4 +1,8 @@
{
"label": "Guides",
- "position": 3
+ "position": 3,
+ "collapsed": true,
+ "customProps": {
+ "icon": "book"
+ }
}
diff --git a/docs/contributing/guides/development-guide.md b/docs/contributing/guides/development-guide.md
index 5bedd6a..843175f 100644
--- a/docs/contributing/guides/development-guide.md
+++ b/docs/contributing/guides/development-guide.md
@@ -3,231 +3,167 @@ sidebar_position: 1
---
# Development Guide
-## :paw_prints: First Steps
-1. Create an account: [GitHub](https://github.com/)
-2. Create an account: [Discord](https://discord.com/)
+Technical guidelines for contributing to Arrow's GitHub repositories.
+
+## First Steps
+
+1. Create a [GitHub](https://github.com/) account
+2. Create a [Discord](https://discord.com/) account
3. Sign the [CLA](https://www.arrowair.com/docs/contributing/cla)
4. Join the [Arrow Discord](https://discord.com/invite/arrow)
- - Be sure to visit the `#start-contributing` channel and give yourself a role!
-5. Set up a GPG Key
- - See [Sign Your Commits](#lock_with_ink_pen-sign-your-commits) for instructions
-
-## :carousel_horse: Workflow
-### :round_pushpin: Claim a Task
-1. Visit the [Arrow Dework](https://app.dework.xyz/arrow-air)
- - Sign in with your Discord credentials
-3. View open tasks
- - 
-4. Claim a task, easy as a button click!
- - 
- - Some important tasks are by **application only**. Describe why you're a good fit for the task!
-
-### :wrench: Work on a Task or Subtask
-:exclamation: See our [Git Guidelines](#construction-git-guidelines)
-1. Clone or fork the target repository.
- - If you are not a core member of an [Arrow GitHub team](https://github.com/orgs/Arrow-air/teams), you will need to work from a fork.
- - [How to Fork a Repository](https://docs.github.com/en/get-started/quickstart/fork-a-repo)
-2. Create a branch.
- - Our branch names are generated by Dework! See our [branch guidelines](#deciduous_tree-branches).
-3. Code!
- - Be sure to follow our [Code Style Guides](./style-guides/intro.md)!
-4. :exclamation: **Sign** :exclamation: your changes and push to the remote.
- - Commits to all remote branches must be signed
- - See [Sign Your Commits](#lock_with_ink_pen-sign-your-commits) for instructions on setting up a GPG Key
- - Use the `-S` option to sign your commits
- - `git commit -S -m "Add README.md"`
-
-### :checkered_flag: Push Changes
-1. Make a pull request targeting the `develop` branch
- - A "Pull Request" is a public request to merge your branch into another branch
- - If making edits to the [website](https://github.com/Arrow-air/website/), seek to merge your PR into the website `staging` branch instead.
- - `main` is our latest stable release. `develop` is merged into `main` at the end of every release.
- - [How to create a pull request from a fork](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/creating-a-pull-request-from-a-fork).
-2. Confirm the presence of the `cla-signed` label.
- - If you haven't signed the [CLA](./../sign-cla.mdx), the cla-bot will be disappointed :angry:
-3. Confirm that the GitHub Actions checks pass.
- - These checks will vary from repository to repository
- - 
-4. Get approvals!
- - The number of approvals may vary from repo to repo.
- - Approvals generally need to come from core members of the [Arrow teams](https://github.com/orgs/Arrow-air/teams).
-5. Merge!
-
-## :zap: VS Code Extensions
-
-These extensions are **recommended**:
-
-### Generic
-```bash
-# In VS Code Quick Open (Ctrl+P)
-ext install \
-bierner.github-markdown-preview \
-docsmsft.docs-yaml \
-stkb.rewrap \
-eamodio.gitlens \
-ms-vscode-remote.vscode-remote-extensionpack \
-tamasfe.even-better-toml \
-EditorConfig.EditorConfig
-```
+5. Set up commit signing (see [Sign Your Commits](#sign-your-commits))
-- [GitHub Markdown Preview](https://marketplace.visualstudio.com/items?itemName=bierner.github-markdown-preview)
- - Includes `mermaid` (uml) rendering and emoji rendering in markdown preview pane
-- [docs-yaml](https://marketplace.visualstudio.com/items?itemName=docsmsft.docs-yaml&ssr=false)
- - Intellisense, validation for YAML files
-- [Rewrap](https://marketplace.visualstudio.com/items?itemName=stkb.rewrap)
- - Wrap code comments to fit within n characters
- - Need to enable this in Preferences->Settings->type "Rewrap"
- - 80 characters is the recommended column
-- [GitLens](https://marketplace.visualstudio.com/items?itemName=eamodio.gitlens)
- - Hover over lines to see commit history, last author
-- [Remote Development](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.vscode-remote-extensionpack)
- - For working over SSH
-- [Even Better TOML](https://marketplace.visualstudio.com/items?itemName=tamasfe.even-better-toml)
- - TOML files are used for Rust configuration
- - Validation, syntax highlighting
-- [EditorConfig](https://marketplace.visualstudio.com/items?itemName=EditorConfig.EditorConfig)
- - Override user/workspace settings with settings found in `.editorconfig` files.
-
-### Arrow Web projects
-```bash
-# In VS Code Quick Open (Ctrl+P)
-ext install \
-esbenp.prettier-vscode \
-johnsoncodehk.volar
+## Git Workflow
-```
+### Working on a Task
-- [Prettier - Code formatter](https://open-vsx.org/extension/esbenp/prettier-vscode)
- - Auto formatting files based on .prettierrc.yaml config
-- [Vue Language Features (Volar)](https://open-vsx.org/extension/Vue/volar)
- - Syntax highlighting for .vue files
- - Additional Vue development features
- - When formatting .vue files, choose prettier as the default instead!
+1. **Fork or clone** the target repository
+ - If you're not a member of an [Arrow GitHub team](https://github.com/orgs/Arrow-air/teams), work from a fork
+ - [How to fork a repository](https://docs.github.com/en/get-started/quickstart/fork-a-repo)
-### Arrow Terraform projects
-```bash
-# In VS Code Quick Open (Ctrl+P)
-ext install \
-4ops.terraform
-```
+2. **Create a branch** with a descriptive name
+ - Use the format: `username/short-description`
+ - Example: `thomasg/fix-landing-gear-docs`
+
+3. **Make your changes**
+ - Follow our [Code Style Guides](./style-guides/index.md)
+ - Keep commits focused and well-described
-- [Terraform](https://marketplace.visualstudio.com/items?itemName=4ops.terraform)
- - Syntax highlighting for `.tf` files
+4. **Sign and push** your commits
+ - All commits must be signed (see [Sign Your Commits](#sign-your-commits))
+ - `git commit -S -m "fix: correct motor arm dimensions"`
+### Pull Requests
-## :construction: Git Guidelines
+1. **Target the correct branch**
+ - Most repos: target `develop`
+ - Website repo: target `staging`
-### :deciduous_tree: Branches
+2. **Confirm the `cla-signed` label** appears
+ - If you haven't signed the [CLA](./../sign-cla.mdx), the bot will block your PR
-Use the suggested [Dework Task](https://app.dework.xyz/arrow-air) branch name.
+3. **Confirm CI checks pass**
+ - Checks vary by repository
-
-- e.g. `am-smith/dw-227/rust-service-template`
-- This links your work to a ticket
-- Closing a pull request with this branch will also mark the Dework task as "Done"!
-- Subtasks have their own branch names. Click on the subtask first to open up the subtask menu.
+4. **Get approvals**
+ - Approvals generally come from [Arrow team](https://github.com/orgs/Arrow-air/teams) members
+ - Number of required approvals varies by repo
-### :lock_with_ink_pen: Sign Your Commits
+5. **Merge!**
-We enforce signed commits to authenticate commits from an author.
-- Security, accountability, traceability
-- ["How (and why) to sign Git commits" - Alessandro Segala](https://withblue.ink/2020/05/17/how-and-why-to-sign-git-commits.html)
+**PR Best Practices:**
+- Keep PRs small and focused — easier to review
+- Write clear descriptions of what changed and why
+- One PR per issue/task
+- If commit history is messy, use "Squash and Merge"
+
+---
-:exclamation: All remote branches are protected from unsigned commits through
-GitHub repository settings.
+## Sign Your Commits
-Setting up a GPG Key:
-- [Generate a GPG
- Key](https://docs.github.com/en/authentication/managing-commit-signature-verification/generating-a-new-gpg-key)
-- [Informing Git about your GPG Key](https://docs.github.com/en/authentication/managing-commit-signature-verification/telling-git-about-your-signing-key)
-- [Informing GitHub about your GPG Key](https://docs.github.com/en/authentication/managing-commit-signature-verification/adding-a-gpg-key-to-your-github-account)
-- All commits signed by default: `git config --global commit.gpgsign true`
+We require signed commits for security and accountability.
-Add an `-S` to your commit command to sign it, e.g. `git commit -S -m "Add
-README.md"`.
+**Setup:**
+1. [Generate a GPG key](https://docs.github.com/en/authentication/managing-commit-signature-verification/generating-a-new-gpg-key)
+2. [Tell Git about your key](https://docs.github.com/en/authentication/managing-commit-signature-verification/telling-git-about-your-signing-key)
+3. [Add the key to GitHub](https://docs.github.com/en/authentication/managing-commit-signature-verification/adding-a-gpg-key-to-your-github-account)
+4. Enable signing by default: `git config --global commit.gpgsign true`
+
+Sign individual commits with `-S`: `git commit -S -m "your message"`
+
+---
-### :speech_balloon: Commit Messages
+## Commit Messages
+
+We use [conventional commits](https://www.conventionalcommits.org/en/v1.0.0/) for automated releases and changelogs.
-For most of the repositories, we've set up an auto-release process where commit
-messages will be used to generate a CHANGELOG.md file and determine the new
-release version.
-This makes it extra important to use the correct messages when committing your
-code.
-Follow the guidelines as described below, which are based on [conventional commits](https://www.conventionalcommits.org/en/v1.0.0/).
```
-[(optional scope)]:
+[(scope)]:
[optional body]
-[optional footer(s)]
+[optional footer]
```
-- The title should start with a change `type` (lower case):
- - build -- Changes to build process, does not include code changes, results in ****Patch**** release
- - ci -- Changes to CI process, does not include code changes, results in **Patch** release
- - docs -- Changes to Docs / .md files, does not include code changes, results in **Patch** release
- - fix -- Patches a bug, results in **Patch** release
- - perf -- Performance fix, results in **Patch** release
- - refactor -- Code refactor changes, results in **Patch** release
- - style -- Code / file formatting and style fixes, results in **Patch** release
- - test -- Changes to Tests, results in **Patch** release
- - feat -- Introduces a new feature, results in **Minor** release
-- The title `description` should start lower case (**Add new feature**)
-- Adding `!` after the `type` in the title, will indicate a breaking release.
- This results in a **Major** release. A BREAKING CHANGE notice
- can be added to the commit footer.
+**Types:**
+| Type | Description | Release |
+|------|-------------|---------|
+| `fix` | Bug fix | Patch |
+| `feat` | New feature | Minor |
+| `docs` | Documentation only | Patch |
+| `refactor` | Code restructuring | Patch |
+| `test` | Adding/updating tests | Patch |
+| `build` | Build system changes | Patch |
+| `ci` | CI configuration | Patch |
+| `perf` | Performance improvement | Patch |
+| `style` | Code formatting | Patch |
+
+**Breaking changes:** Add `!` after the type (e.g., `feat!: redesign API`) for a Major release.
+
+**Guidelines:**
+- Title: max 50 characters, start lowercase, no period
+- Body: max 72 characters per line
+- Keep it concise and descriptive
-Additionally:
-- Do not exceed a line length of 50 characters for commit title
-- Do not exceed a line length of 72 characters for commit body
-- Do **not** end the message with a period
+---
-Keep these in mind always, especially when squashing commits (one message).
+## VS Code Extensions
-### :+1: Pull Requests
+Recommended extensions for Arrow development:
-- Pull Requests should target the `develop` branch
- - For the [website](https://github.com/Arrow-air/website) repository, target the `staging` branch
-- Keep PRs small and easy to review!
- - Our reviewers may ask you to divide your PR into
- multiple smaller PRs.
-- If the commit history is messy, recommend "Squash and Merge" when pushing in
- changes.
- - The squashed commit should have a thorough description of the changes
- added.
-- The Pull Request comments should be descriptive
- - A brief description of what was changed and why
-- Your PR should equate to no more than one Dework issue
- - Addressing multiple tickets in one merge makes it harder to debug breaking changes.
- - Use `git commit --fixup ` to fix a previous commit.
+### General
+```bash
+ext install bierner.github-markdown-preview
+ext install docsmsft.docs-yaml
+ext install stkb.rewrap
+ext install eamodio.gitlens
+ext install ms-vscode-remote.vscode-remote-extensionpack
+ext install tamasfe.even-better-toml
+ext install EditorConfig.EditorConfig
+```
+- **GitHub Markdown Preview** — Mermaid diagrams and emoji in preview
+- **docs-yaml** — YAML intellisense and validation
+- **Rewrap** — Wrap comments to 80 characters
+- **GitLens** — Git blame and history on hover
+- **Remote Development** — SSH development
+- **Even Better TOML** — Rust config file support
+- **EditorConfig** — Consistent editor settings
-## :books: Repositories (Create, Modify, Delete)
+### Web Projects
+```bash
+ext install esbenp.prettier-vscode
+ext install johnsoncodehk.volar
+```
-Repositories are managed through [Terraform](https://www.terraform.io/).
+- **Prettier** — Auto-formatting
+- **Volar** — Vue.js support
-Requests for repository management should be made to @owlot.
+### Terraform
+```bash
+ext install 4ops.terraform
+```
+
+---
+## Build Automation
-## :hammer: Makefile and build automation
+Arrow repos use Makefiles with containerized tooling via [arrow-sanitychecks](https://ghcr.io/arrow-air/tools/arrow-sanitychecks).
-All Arrow GitHub repositories are started from templates and are provisioned by Terraform to automate changes in the workflow.
-Templates contain a Makefile which is propagated to all repositories.
+```bash
+make help # See all targets
+make test # Run all tests/lints
+make all # Test, build, and release
+```
-Each repository has a Makefile which uses [make](https://www.gnu.org/software/make/manual/make.html) utility to run build targets.
-All make targets call specific commands from a docker container [arrow-sanitychecks](https://ghcr.io/arrow-air/tools/arrow-sanitychecks).
-arrow-sanitychecks is a docker image with linting tools needed to validate code so developers don't have to install them locally.
-- they can be run separately - e.g. `make cspell-test`.
-- or multiple targets can be run at once. This is done during pre-commit hooks or PR checks. - `make test`.
-- or all targets to run test, build and release phases - `make all`.
+You don't need to install linting tools locally — everything runs in Docker.
-### Makefile targets
-Run `make help` to see all available targets or explore [template Makefile](https://github.com/Arrow-air/tf-github/blob/main/src/templates/all/Makefile)
-and linked Makefiles.
+---
+## Repository Management
-## :closed_lock_with_key: Admin Access
+Repositories are managed through Terraform. For repo changes, contact @owlot.
-Elevated access to our various team platforms is limited.
+## Admin Access
-Ping @thomasg or @owlot and describe what you want to do.
+Elevated platform access is limited. Ping @thomasg or @owlot with what you need.
diff --git a/docs/contributing/guides/release-checklist.md b/docs/contributing/guides/release-checklist.md
index 71b8f83..a8f14c8 100644
--- a/docs/contributing/guides/release-checklist.md
+++ b/docs/contributing/guides/release-checklist.md
@@ -1,12 +1,13 @@
---
sidebar_position: 3
+draft: true # Not currently using this workflow - needs revision for our needs
---
# Release Checklist
-## :bust_in_silhouette: Developer
+## Developer
-### :hatching_chick: Create an End-of-Release Review
+### Create an End-of-Release Review
1. Create a new branch from `develop`.
@@ -29,18 +30,18 @@ Why not create a `develop` -> `main` PR for the review?
- `develop` is a protected branch that can only be pushed into through a PR.
- Using an unprotected branch `r#-final-review` allows direct pushes to address review comments.
-### :mag: Hold Review
+### Hold Review
1. Inform peer reviewer(s) and await review comments.
2. Push review fixes to your `r#-final-review` branch *as a new commit* (i.e. "fix: address final review comments")
3. After approval(s), when your code is passing all CI checks, you may merge to `main`.
-### :broom: Cleanup
+### Cleanup
1. Since `develop` also needs the changes added to `r#-final-review`, open a PR to merge `main` into `develop`.
2. Have the same reviewers approve the PR.
-## :busts_in_silhouette: Peer Reviewers
+## Peer Reviewers
This is the *last chance* for a review of the code before it is immortalized forever as a new release.
diff --git a/docs/contributing/guides/stacks/crash-course/rust-crash-course.md b/docs/contributing/guides/rust-crash-course.md
similarity index 98%
rename from docs/contributing/guides/stacks/crash-course/rust-crash-course.md
rename to docs/contributing/guides/rust-crash-course.md
index 61a710f..576d3fe 100644
--- a/docs/contributing/guides/stacks/crash-course/rust-crash-course.md
+++ b/docs/contributing/guides/rust-crash-course.md
@@ -1,3 +1,8 @@
+---
+draft: true
+---
+
+
# Arrow Rust Crash Course
Through these projects you will learn what you need to contribute to the Arrow Rust codebase.
diff --git a/docs/contributing/guides/stacks/_category_.json b/docs/contributing/guides/stacks/_category_.json
deleted file mode 100644
index b5ac637..0000000
--- a/docs/contributing/guides/stacks/_category_.json
+++ /dev/null
@@ -1,4 +0,0 @@
-{
- "label": "Project Stacks",
- "position": 5
-}
diff --git a/docs/contributing/guides/stacks/crash-course/_category_.json b/docs/contributing/guides/stacks/crash-course/_category_.json
deleted file mode 100644
index 7083734..0000000
--- a/docs/contributing/guides/stacks/crash-course/_category_.json
+++ /dev/null
@@ -1,4 +0,0 @@
-{
- "label": "Crash Courses",
- "position": 1
-}
diff --git a/docs/contributing/guides/stacks/spearhead-stack.md b/docs/contributing/guides/stacks/spearhead-stack.md
deleted file mode 100644
index d3cd60b..0000000
--- a/docs/contributing/guides/stacks/spearhead-stack.md
+++ /dev/null
@@ -1,33 +0,0 @@
-# Project Spearhead Stack
-
-## :triangular_ruler: CAD - *Fusion 360*
-
-Resources:
-- [Autodesk Fusion 360 Website](https://www.autodesk.com/products/fusion-360/overview?term=1-YEAR&tab=subscription)
-
-## :zap: eCAD - *Eagle (Fusion 360)*
-
-Resources:
-- [Eagle Website](https://www.autodesk.com/products/eagle/overview)
-
-## :airplane: Flight Hardware - *Pixhawk 6C*
-Resources:
-- [6C Wiring Diagram](https://docs.px4.io/main/en/assembly/quick_start_pixhawk6c.html)
-
-
-## :computer: Flight Software Framework - *PX4 Autopilot*
-
-Resources:
-- [PX4 Autopilot Website](https://px4.io/software/software-overview/)
-
-## :slot_machine: Flight Simulation - *Godot*
-
-:construction: [Arrow Simulation Repository (GitHub)](https://github.com/Arrow-air/Modelling-Simulation-and-Control) :construction:
-
-Resources:
-- [Godot Website](https://godotengine.org/)
-
-## :heavy_division_sign: Matrix Programming - *Octave*
-
-Resources:
-- [Octave Website](https://octave.org/)
diff --git a/docs/contributing/guides/style-guides/_category_.json b/docs/contributing/guides/style-guides/_category_.json
index 954d8e3..a6c2740 100644
--- a/docs/contributing/guides/style-guides/_category_.json
+++ b/docs/contributing/guides/style-guides/_category_.json
@@ -1,4 +1,8 @@
{
"label": "Style Guides",
- "position": 4
+ "position": 4,
+ "link": {
+ "type": "doc",
+ "id": "contributing/guides/style-guides/index"
+ }
}
diff --git a/docs/contributing/guides/style-guides/intro.md b/docs/contributing/guides/style-guides/index.md
similarity index 100%
rename from docs/contributing/guides/style-guides/intro.md
rename to docs/contributing/guides/style-guides/index.md
diff --git a/docs/contributing/guides/style-guides/python3.md b/docs/contributing/guides/style-guides/python3.md
index 75d0579..ff67824 100644
--- a/docs/contributing/guides/style-guides/python3.md
+++ b/docs/contributing/guides/style-guides/python3.md
@@ -87,8 +87,4 @@ help(ComplexNumber.add) # to access method's docstring
## :page_with_curl: License Notice
-Every file should start with a license notice.
-
-The license may vary from repository to repository.
-
-Check with the `#legal` team if unclear which license to use.
+Every file should start with a GPL license notice.
diff --git a/docs/contributing/guides/style-guides/typescript.md b/docs/contributing/guides/style-guides/typescript.md
index f4573d8..f4e3827 100644
--- a/docs/contributing/guides/style-guides/typescript.md
+++ b/docs/contributing/guides/style-guides/typescript.md
@@ -13,8 +13,4 @@ We use [gts](https://github.com/google/gts) to lint and automatically format cod
## :page_with_curl: License Notice
-Every file should start with a license notice.
-
-The license may vary from repository to repository.
-
-Check with the `#legal` team if unclear which license to use.
+Every file should start with a GPL license notice.
diff --git a/docs/contributing/guides/style-guides/writing.md b/docs/contributing/guides/style-guides/writing.md
index 6a4b4a3..107cee1 100644
--- a/docs/contributing/guides/style-guides/writing.md
+++ b/docs/contributing/guides/style-guides/writing.md
@@ -17,7 +17,7 @@ misunderstandings arise when local idioms or slang are introduced.
In an attention economy, first impressions matter in forming long-term partnerships. The Arrow brand will benefit from consistent writing styles by presenting an accessible, professional, organized and committed front that attracts contributors and business partners.
-## :book: Guidelines
+## 📖 Guidelines
### :telescope: Scope
The style guide applies to all official and public-facing materials.
diff --git a/docs/contributing/index.mdx b/docs/contributing/index.mdx
new file mode 100644
index 0000000..cbe0185
--- /dev/null
+++ b/docs/contributing/index.mdx
@@ -0,0 +1,12 @@
+---
+sidebar_position: 1
+hide_table_of_contents: true
+---
+
+import DocCardList from '@theme/DocCardList';
+
+# How to Contribute
+
+Arrow is an open community — there's no gatekeeping here. Whether you're an engineer, designer, writer, or just curious, there's a way to get involved. Start below.
+
+
diff --git a/docs/contributing/intro.mdx b/docs/contributing/intro.mdx
index 2e00e5b..5967950 100644
--- a/docs/contributing/intro.mdx
+++ b/docs/contributing/intro.mdx
@@ -1,81 +1,93 @@
---
-sidebar_position: 1
+sidebar_position: 2
+description: How to join, what we need help with, and quick wins for new contributors.
+sidebar_custom_props:
+ icon: rocket
---
# Getting Started
-The best way to get connected with the Arrow community and start working is to join our Discord server!
+Welcome to Arrow! We're a global community building open source aircraft. Here's how to get involved.
-Introduce yourself in the `#general` channel and we'll all be happy to get you up to speed - we're a friendly bunch!
+## Join the Community
-:exclamation: As a general rule of culture, you don't need formal permission to start working on anything. However, it's best to communicate well with the community to keep us all aligned and working on high-impact tasks.
+**[Discord](https://discord.com/invite/arrow)** is home base. It's where we coordinate, hold meetings, and hang out. Introduce yourself in `#general` and we'll help you get oriented.
-See the [Development Guide](./guides/development-guide.md) for contributions to our GitHub repositories.
+:::tip You Don't Need Permission
+Arrow has an open culture — you don't need formal approval to start contributing. Just communicate with the community to stay aligned on priorities.
+:::
-To ensure that you have a smooth contributing experience (and get paid fairly 😊), we created this page to include every technology and documentation we used to establish our workflows and compensation frameworks.
+## Community Calls
-## :busts_in_silhouette: Collaboration
+We hold regular community calls to sync up on progress, discuss priorities, and hang out. Times are announced in Discord and posted in the events tab there. These are the fastest way to get up to speed and meet the team.
-### [Discord](https://discord.com/invite/arrow)
+## Ways to Contribute
-We use Discord to exchange ideas, schedule meetings, and send memes around. Arrow's Discord channel is the best place to keep up with Arrow's development and hang out with other contributors. All of our meetings happen and are scheduled through Discord - join them!
+### Grants & Bounties
-### [GitHub](https://github.com/Arrow-air)
+We fund contributor work through grants and bounties coordinated on the **[DAO Forum](https://dao.arrowair.com)**. If you have an idea that would benefit Arrow — or want to take on existing work — pitch it there.
-Everything we do is open-sourced. Software and hardware engineering works can be found from our repositories.
+**Current priorities:**
+- **Attachments** for [Project Quiver](/project-quiver) (cameras, sensors, delivery mechanisms)
+- **Documentation** and guides
+- **Flight testing** and validation
+- **Manufacturing** tooling and processes
+- **Software** (companion computer, ground control, web)
-### [Dework](https://app.dework.xyz/arrow-air)
+### Dev-Kit Loans
-Dework is a web3-native collaboration platform that allows for tasks/bounties management. Contributors can sync up their Discord roles to Dework and get compensated. Dework is also a good place to see what people are working on and their progress.
+Building hardware? We loan out Quiver dev-kits to contributors developing attachments or integrations. Check the [Project Quiver](/project-quiver) page for details on the platform and how to apply.
-## :money_with_wings: Compensation
+### Skills We Need
-There are multiple ways to get compensated:
+You don't have to be an aerospace engineer. We need help across many areas:
-* Bounties: Complete bounties on Dework will be paid in USDC or ARROW, or a mix of both. These will be specific tasks that have a defined scope ahead of time.
-* Grants: If you have an idea for something that you think would benefit Arrow, you can pitch it to us and we may give you a grant to work on it. Similar to a bounty, we will set milestones and USDC/ARROW payouts. We also strive to issue retroactive grants when contributions are made without any compensation plan set ahead of time. Send a message in `#general` if you have a grant idea or think someone deserves a retroactive grant.
-* Commitment Track: Our core contributors are paid by a combination of Arrow tokens and USDC stablecoins. Think of this as the "base salary" of a traditional job. Of course, we provide flexibility on your commitment level. See below for more information. If you're interested in progressing to commitment track, start with some bounties and grants first to get integrated with Arrow.
-* Bonus: Each regular contributor has 1,000 ARROW each month to "tip" other contributors to appreciate their works. This is done in Coordinape (see below).
+- **Mechanical / CAD** — Airframe, attachments, manufacturing fixtures
+- **Electronics** — PCB design, wiring, sensors
+- **Software** — Embedded, web, companion computer, ground control
+- **Flight Testing** — Pilots, test planning, data analysis
+- **Documentation** — Guides, tutorials, technical writing
+- **Video / Media** — Demos, tutorials, promotional content
-:exclamation: As of now, we're still finalizing the details of our Arrow token, but we will make sure that all contributors are retroactively rewarded for all of their hard work. We strive to have a culture of merit - If you contribute something valuable, you will be rewarded.
+### Quick Wins for New Contributors
-### [Coordinape](https://app.coordinape.com/)
+Not sure where to start? Some easy first contributions:
-Contributors can see what other contributors are doing/have done in a given month and have 1,000 ARROW tokens to allocate to other contributors to show their appreciation.
+- Fix typos or improve clarity in the docs
+- Test and give feedback on existing documentation
+- Help answer questions in Discord
+- Review and comment on open PRs or forum proposals
-### [LlamaPay](https://llamapay.io/)
+## Before You Contribute Code
-Contributors admitted to the Commitment Track will be able to receive USDC and Arrow token vesting through LlamaPay, a web3 product that pays you **per second**. It's super cool!
+1. **Sign the [CLA](/docs/contributing/cla)** — Required before we can merge your PRs
+2. **Read the [Development Guide](./guides/development-guide.md)** — Git workflow, commit conventions, and tooling
-## :scroll: Docs
+## Collaboration Tools
-Contributors who are interested in the Commitment Track should monitor Discord for each period's sign-up announcements. Usually, the sign-up is done by filling out a Google Form.
+| Tool | Purpose |
+|------|---------|
+| [Discord](https://discord.com/invite/arrow) | Chat, meetings, coordination |
+| [GitHub](https://github.com/Arrow-air) | Code, hardware designs, issues |
+| [DAO Forum](https://dao.arrowair.com) | Governance, grants, proposals |
+| [HammerTime](https://hammertime.cyou/) | Timezone-friendly time sharing |
+| [Arrow Drive](https://drive.google.com/drive/folders/1efLrzqsiajzlxXiOUjxPT53CkfDGC0Yu?usp=sharing) | Presentations, brand assets |
-[**Arrow Compensation Framework**](https://docs.google.com/document/d/1GbhslaFcHT1w2zCWbtLFafrsW_QIZ7fxcQXicGOa5Hw/edit?usp=sharing): The most detailed explanation of Arrow's compensation framework. This is the single source of truth from which compensation tools are configured.
+## Working Async
-[**Arrow Contributor Compensation Workbook**](https://docs.google.com/spreadsheets/d/1Mngt2VHdpZgCwRceVHUqXD9ufMx2gninVBPxm0RkXRQ/edit?usp=sharing): Outlines requirements for different levels of expertise and a brief compensation scenario analysis.
+Arrow contributors are spread across the globe. Most communication is asynchronous — don't expect instant responses, but do expect thoughtful ones. Document your work, over-communicate context, and be patient with timezone differences.
-[**ARROW Initial Allocation and Management [DRAFT]**](https://docs.google.com/document/d/19yGuWkonvxdYrXz8rXYAXg1EwEluPGvrLS64dcmEK6Y/edit?usp=sharing): Outlines the proposed token allocation for founding contributors. It also provides a breakdown of the use of the ARROW treasury.
+## Contributor Pages
-## :link: Important Links
+Want to add your profile to the site?
-### [HammerTime](https://hammertime.cyou/)
+1. Copy the [contributor template](https://raw.githubusercontent.com/Arrow-air/website/main/docs/contributing/contributors/_template.md)
+2. Go to the [contributors directory](https://github.com/Arrow-air/website/tree/main/docs/contributing/contributors)
+3. Click **Add file** → **Create new file**
+4. Fill out the template and submit a PR
-Our contributors are located across the globe! HammerTime allows you to share a date/time in the Discord and convert it to localized format, so that contributors can see the correct time in their respective timezones.
+
-### [Arrow Drive](https://drive.google.com/drive/folders/1efLrzqsiajzlxXiOUjxPT53CkfDGC0Yu?usp=sharing)
-
-The Google Drive stores important paperwork, engineering concepts, presentations, brand artworks, and more.
-
-## :wave: Contributor Introduction Pages
-
-Can't find your introduction page? You can add it yourself!
+---
-1. Copy the contents of the [contributors template](https://raw.githubusercontent.com/Arrow-air/website/main/docs/contributing/contributors/_template.md)
-2. Go to [the contributors directory in GitHub](https://github.com/Arrow-air/website/tree/main/docs/contributing/contributors)
-3. Select `Add file` -> `Create new file`
-4. Paste the contents you copied from the template
-5. Fill out the template with your own information (you can use the `preview` to see if you're happy with the result)
-6. Create a PR from a new branch
- 
-7. Your PR will be reviewed for approval. If everything looks ok, your PR will be approved and merged.
+Questions? Just ask in Discord — we're happy to help!
diff --git a/docs/contributing/projects.md b/docs/contributing/projects.md
deleted file mode 100644
index fec42c3..0000000
--- a/docs/contributing/projects.md
+++ /dev/null
@@ -1,33 +0,0 @@
----
-sidebar_position: 7
----
-
-# Pending Projects
-
-This page will serve as a general list of some ideas for DAO projects that we would like to pursue further. If any of these are of interest to you, send a message in Discord and we may be able to set up a grant.
-
-### Flight Test Tracking Platform
-
-As we expand our flight tests, there will be a need for some more organization of the test data. We've discussed the idea for an tool that would let us record each test flight with the type of aircraft hardware used, log files, video recordings, and any notes from the flight. We imagine people flying with many variations of hardware, so keeping things organized could be a unique challenge.
-
-Getting started on this would require someone to take ownership on developing the concept further with input from other DAO members and creating some UI mockups of the tool.
-
-### Safety Critical RTOS
-
-As we've investigated building an open source flight controller stack for manned aviation, we've realized that one major barrier is the lack of an open source real time operating system that we can build on top of. Arrow would like to help build this as a good for the world. We'd want to adhere to SIL-3 and DO-178C in the development process. This is a difficult and lengthy undertaking and we'd need very high confidence in the team taking it on.
-
-We'd hope to partner with other projects that would benefit from an open source safety critical RTOS to help share the burden. Getting started on this would require a experienced engineer to begin organizing the project. See this [Discord thread](https://discord.com/channels/853833144037277726/1103816452131266651/1103816452131266651) for more context.
-
-### Version Control/Better Management Tools for Decentralized Hardware Development
-
-This could be split into multiple different projects. We've felt some friction in the development and organization process for our hardware that we think could be solved by some better tooling. Early work on this would be to thoughtfully think through the problems to be solved and scope, then to create some UI mockups. Some features we've discussed:
-
-- "Github for hardware"
-
-- Listing and organization of all our CAD files with context for manufacturing
-
-- Fork-ability of parts and part -> assembly management
-
-- Easy and permissionless onboarding for new contributors to get to work with our CAD files
-
-- A "place order" button that routes the order to a nearby Arrow workshop or approved supplier for fulfillment
diff --git a/docs/contributing/sign-cla.mdx b/docs/contributing/sign-cla.mdx
index 58fa572..b7cc4d3 100644
--- a/docs/contributing/sign-cla.mdx
+++ b/docs/contributing/sign-cla.mdx
@@ -1,9 +1,19 @@
---
sidebar_position: 4
+description: Sign Arrow's Contributor License Agreement to contribute to our open source projects.
+sidebar_custom_props:
+ icon: edit
---
# Sign CLA
import SignCLA from '@site/src/components/CLA';
+Before contributing to Arrow projects, we ask that you sign our Contributor License Agreement (CLA). The CLA confirms that you have the right to contribute your work and grants Arrow the necessary rights to include it in our projects.
+
+## Our Commitment to Copyleft
+
+Arrow is committed to releasing all of our work under copyleft open source licenses, such as [GPL](https://www.gnu.org/licenses/gpl-3.0.en.html) for software and [CERN-OHL-S](https://ohwr.org/cern_ohl_s_v2.txt) for hardware. This means your contributions will always remain open source and freely available to the community.
+
+While the CLA grants Arrow broad rights to your contributions, we make this commitment so you can contribute with confidence that your work will benefit the open source community rather than being relicensed under proprietary terms.
diff --git a/docs/demo-operations-procedure.md b/docs/demo-operations-procedure.md
new file mode 100644
index 0000000..64c9151
--- /dev/null
+++ b/docs/demo-operations-procedure.md
@@ -0,0 +1,198 @@
+---
+sidebar_position: 101
+sidebar_custom_props:
+ icon: gear
+---
+
+# Pre-Flight Operations Procedure
+
+Document ID: `ARROW-OPS-2026-0087`
+Classification: **OPERATIONAL**
+Effective Date: 2026-01-01
+Supersedes: ARROW-OPS-2025-0087 Rev 4
+
+---
+
+## 1. Purpose
+
+This procedure establishes the standardized sequence for pre-flight verification of Arrow Quiver-class unmanned aircraft systems. Compliance is mandatory for all flight operations.
+
+## 2. Applicability
+
+| Platform | Configuration | Applicable |
+|----------|---------------|------------|
+| Quiver PT3 | All variants | Yes |
+| Quiver Dev-Kit | All variants | Yes |
+| Quiver PT2 | Standard only | Partial — see Appendix C |
+| Quiver PT1 | — | No |
+
+## 3. Prerequisites
+
+Before initiating this procedure, verify:
+
+- [ ] Pilot-in-command (PIC) holds current certification
+- [ ] Airspace authorization confirmed for planned operation area
+- [ ] Weather conditions within operational envelope
+- [ ] Aircraft maintenance status: **FLIGHT READY**
+- [ ] Battery state-of-charge ≥ 90%
+- [ ] Ground control station operational
+
+## 4. Equipment Required
+
+| Item | Quantity | Notes |
+|------|----------|-------|
+| Calibrated multimeter | 1 | For voltage verification |
+| Torque wrench (2-10 N·m) | 1 | For fastener checks |
+| Inspection mirror | 1 | For underside inspection |
+| Logbook | 1 | Current aircraft logbook |
+| Checklist card | 1 | Laminated quick-reference |
+
+## 5. Procedure
+
+### 5.1 Phase 1 — Documentation Review
+
+**Estimated time:** 5 minutes
+
+1. Verify aircraft identification matches assignment
+2. Review maintenance logbook for:
+ - Last inspection date (must be within 25 flight hours)
+ - Open discrepancies or MEL items
+ - Component life limits
+3. Confirm weight and balance within limits for planned payload
+4. Document weather conditions:
+
+```
+METAR: _________________ Time: _______
+Wind: _____ kts @ _____° Gusts: _____ kts
+Visibility: _____ SM Ceiling: _____ ft AGL
+Temperature: _____°C Humidity: _____%
+```
+
+### 5.2 Phase 2 — Structural Inspection
+
+**Estimated time:** 10 minutes
+
+#### 5.2.1 Airframe
+
+| Checkpoint | Criteria | Pass |
+|------------|----------|------|
+| Frame tubes | No cracks, dents, or deformation | ☐ |
+| Motor arms | Secure, fold mechanism locked | ☐ |
+| Landing gear | Secure mounting, no damage | ☐ |
+| Fasteners | All present, torque marks aligned | ☐ |
+| Enclosure | Sealed, latches secure | ☐ |
+
+#### 5.2.2 Propulsion
+
+For each motor position (1-4):
+
+| Motor | Propeller | Mounting | Spin Test | Status |
+|-------|-----------|----------|-----------|--------|
+| M1 (FL) | ☐ CW secure | ☐ Tight | ☐ Free | ______ |
+| M2 (FR) | ☐ CCW secure | ☐ Tight | ☐ Free | ______ |
+| M3 (RL) | ☐ CCW secure | ☐ Tight | ☐ Free | ______ |
+| M4 (RR) | ☐ CW secure | ☐ Tight | ☐ Free | ______ |
+
+> **WARNING:** Verify propeller rotation direction matches motor position. Incorrect installation will result in loss of control.
+
+### 5.3 Phase 3 — Electrical Verification
+
+**Estimated time:** 8 minutes
+
+#### 5.3.1 Battery System
+
+1. Remove battery from aircraft
+2. Perform visual inspection:
+ - No swelling, damage, or corrosion
+ - Connector pins clean and straight
+ - Balance lead intact
+3. Record measurements:
+
+| Cell | Voltage | Limit | Status |
+|------|---------|-------|--------|
+| S1 | _____ V | 3.7-4.2V | ☐ |
+| S2 | _____ V | 3.7-4.2V | ☐ |
+| S3 | _____ V | 3.7-4.2V | ☐ |
+| S4 | _____ V | 3.7-4.2V | ☐ |
+| S5 | _____ V | 3.7-4.2V | ☐ |
+| S6 | _____ V | 3.7-4.2V | ☐ |
+| **Total** | _____ V | 22.2-25.2V | ☐ |
+| **Imbalance** | _____ mV | <50mV max | ☐ |
+
+#### 5.3.2 Avionics Power-On
+
+Execute in sequence:
+
+```
+1. Connect battery → Main LED: AMBER
+2. Wait 5 seconds → System initialization
+3. Verify GPS lock → GPS LED: GREEN (>8 sats)
+4. Verify telemetry link → RC LED: GREEN
+5. Verify GCS connection → Heartbeat active
+```
+
+### 5.4 Phase 4 — Functional Test
+
+**Estimated time:** 5 minutes
+
+#### 5.4.1 Control Surface Verification
+
+With throttle at zero and aircraft **DISARMED**:
+
+| Input | Expected Response | Verified |
+|-------|-------------------|----------|
+| Roll right | Motors 1,3 increase indication | ☐ |
+| Roll left | Motors 2,4 increase indication | ☐ |
+| Pitch forward | Motors 3,4 increase indication | ☐ |
+| Pitch back | Motors 1,2 increase indication | ☐ |
+| Yaw right | Motors 1,4 increase indication | ☐ |
+| Yaw left | Motors 2,3 increase indication | ☐ |
+
+#### 5.4.2 Failsafe Verification
+
+1. With GCS connected, disable RC transmitter
+2. Verify failsafe activates within 1.5 seconds
+3. Verify configured failsafe action (RTL/Land/Hold)
+4. Re-enable RC transmitter
+5. Verify normal control restored
+
+### 5.5 Phase 5 — Final Authorization
+
+**All items must be marked complete before flight authorization.**
+
+```
+PIC Verification:
+
+I have personally verified completion of all checklist items.
+Aircraft is airworthy and safe for the planned operation.
+
+PIC Name: _________________________
+PIC Signature: ____________________
+Date/Time: ________________________
+
+Authorization Status: [ ] CLEARED FOR FLIGHT
+ [ ] FLIGHT NOT AUTHORIZED
+
+If not authorized, reason: _______________________
+```
+
+---
+
+## 6. Abort Criteria
+
+Immediately terminate the pre-flight sequence if any of the following are observed:
+
+- Battery cell voltage <3.5V or imbalance >100mV
+- Structural damage or loose fasteners
+- Control response incorrect or erratic
+- GPS satellites <6 or HDOP >2.0
+- Telemetry link loss >3 seconds
+- Weather deterioration below minimums
+
+---
+
+##### References
+
+- ARROW-SPEC-2026-0142 — XR-7 Propulsion Module Technical Specification
+- ARROW-MNT-2026-0023 — Scheduled Maintenance Requirements
+- ARROW-SAF-2026-0011 — Emergency Procedures Manual
diff --git a/docs/demo-technical-specification.md b/docs/demo-technical-specification.md
new file mode 100644
index 0000000..66bc1c0
--- /dev/null
+++ b/docs/demo-technical-specification.md
@@ -0,0 +1,145 @@
+---
+sidebar_position: 100
+sidebar_custom_props:
+ icon: doc
+---
+
+# XR-7 Propulsion Module Technical Specification
+
+Document ID: `ARROW-SPEC-2026-0142`
+Classification: **PUBLIC**
+Revision: 3.2.1
+Last Updated: 2026-02-02
+
+---
+
+## 1. Overview
+
+The XR-7 Propulsion Module is a high-efficiency brushless motor assembly designed for sustained autonomous flight operations in variable atmospheric conditions. This document defines the technical parameters, operational limits, and integration requirements for deployment in Arrow platform configurations.
+
+| Parameter | Value | Unit | Tolerance |
+|-----------|-------|------|-----------|
+| Rated Power | 2,400 | W | ±2% |
+| Max Continuous Current | 45 | A | — |
+| Peak Current (10s) | 62 | A | — |
+| KV Rating | 170 | rpm/V | ±5% |
+| Operating Voltage | 44.4–58.8 | V | — |
+| Mass (bare motor) | 438 | g | ±3g |
+| Stator Diameter | 56 | mm | ±0.1mm |
+| Stator Length | 30 | mm | ±0.1mm |
+
+## 2. Performance Characteristics
+
+### 2.1 Thrust Curve
+
+Measured at sea level, 15°C, 1013.25 hPa with standard 22×7.2 propeller.
+
+| Throttle | Current | Power | Thrust | Efficiency |
+|----------|---------|-------|--------|------------|
+| 25% | 8.2 A | 410 W | 1.82 kg | 4.44 g/W |
+| 50% | 18.6 A | 930 W | 4.21 kg | 4.53 g/W |
+| 75% | 32.4 A | 1,620 W | 6.89 kg | 4.25 g/W |
+| 100% | 48.1 A | 2,405 W | 9.34 kg | 3.88 g/W |
+
+### 2.2 Thermal Limits
+
+> **CAUTION:** Exceeding thermal limits will trigger automatic power derating. Sustained operation above 95°C stator temperature will result in permanent degradation.
+
+- **Maximum Stator Temperature:** 120°C
+- **Maximum Bearing Temperature:** 85°C
+- **Recommended Operating Range:** -20°C to +45°C ambient
+
+## 3. Mechanical Interface
+
+### 3.1 Mounting Pattern
+
+The XR-7 uses a standard 4-bolt radial mounting pattern compatible with Arrow Universal Motor Mount (AUMM) specification.
+
+```
+ [FRONT]
+ ○
+ M4×0.7 19mm
+ ○───────────○
+ │ │
+ │ ● │ ← Shaft centerline
+ │ (∅8mm) │
+ ○───────────○
+ 19mm
+ [REAR]
+```
+
+**Bolt Specification:**
+- Thread: M4×0.7
+- Length: 12mm minimum engagement
+- Grade: 12.9 or equivalent
+- Torque: 3.2 N·m ± 0.2 N·m
+
+### 3.2 Shaft Details
+
+| Feature | Specification |
+|---------|---------------|
+| Diameter | 8.00 mm h6 |
+| Length (exposed) | 22 mm |
+| Thread | M8×1.0 LH |
+| Keyway | 3×3 mm, 12mm length |
+| Material | 4140 steel, hardened |
+
+## 4. Electrical Interface
+
+### 4.1 Power Connections
+
+Three-phase winding connection using 4mm gold-plated bullet connectors.
+
+```
+Phase A ──[YEL]──●
+Phase B ──[ORG]──● → ESC Input
+Phase C ──[RED]──●
+```
+
+### 4.2 Sensor Interface
+
+Optional hall sensor package available. 6-pin JST-SH connector.
+
+| Pin | Signal | Description |
+|-----|--------|-------------|
+| 1 | VCC | 5V supply (10mA max) |
+| 2 | GND | Ground reference |
+| 3 | HA | Hall A output |
+| 4 | HB | Hall B output |
+| 5 | HC | Hall C output |
+| 6 | TEMP | NTC thermistor (10kΩ @ 25°C) |
+
+## 5. Quality Assurance
+
+### 5.1 Acceptance Criteria
+
+Each unit undergoes the following validation sequence:
+
+1. **Visual Inspection** — Surface defects, winding integrity, bearing alignment
+2. **Electrical Test** — Phase resistance (±3%), inductance (±10%), insulation (>100MΩ @ 500VDC)
+3. **Dynamic Balance** — G2.5 or better per ISO 1940-1
+4. **Run-in Test** — 30 minutes at 50% load, thermal stability verification
+5. **Final Inspection** — Dimensional verification, documentation package
+
+### 5.2 Traceability
+
+All units are laser-marked with:
+
+```
+ARROW│XR-7│SN:YYWW-NNNNN│LOT:XXXXXX
+```
+
+- `YY` — Year of manufacture
+- `WW` — Week of manufacture
+- `NNNNN` — Sequential unit number
+- `XXXXXX` — Production lot identifier
+
+---
+
+##### Document Control
+
+| Rev | Date | Author | Description |
+|-----|------|--------|-------------|
+| 3.2.1 | 2026-02-02 | Systems Engineering | Updated thermal limits |
+| 3.2.0 | 2026-01-15 | Systems Engineering | Added sensor interface |
+| 3.1.0 | 2025-11-20 | Propulsion Team | Initial release |
diff --git a/docs/demo-telemetry-report.md b/docs/demo-telemetry-report.md
new file mode 100644
index 0000000..1ef795b
--- /dev/null
+++ b/docs/demo-telemetry-report.md
@@ -0,0 +1,219 @@
+---
+sidebar_position: 102
+sidebar_custom_props:
+ icon: code
+---
+
+# Flight Telemetry Analysis Report
+
+Mission ID: `QV3-2026-0892`
+Platform: Quiver PT3 Dev-Kit
+Date: 2026-01-28
+Duration: 00:34:17
+Operator: Arrow Test Operations
+
+---
+
+## 1. Mission Summary
+
+| Parameter | Value |
+|-----------|-------|
+| Launch Time | 14:32:07 UTC |
+| Landing Time | 15:06:24 UTC |
+| Total Flight Time | 34m 17s |
+| Distance Traveled | 12.847 km |
+| Max Altitude AGL | 98.4 m |
+| Max Ground Speed | 14.2 m/s |
+| Max Vertical Speed | 4.8 m/s |
+| Takeoff Weight | 18.42 kg |
+| Payload | Survey Camera (2.1 kg) |
+
+### 1.1 Mission Profile
+
+```
+ALT(m)
+ 100 ┤ ╭────────────────╮
+ 80 ┤ ╭────╯ ╰────╮
+ 60 ┤ ╭────╯ ╰────╮
+ 40 ┤ ╭────╯ ╰────╮
+ 20 ┤╭────╯ ╰────╮
+ 0 ┼─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴────╯
+ 0 5 10 15 20 25 30 35 40 45 50 (min)
+
+ TKOF CLB CRUISE/SURVEY DESC LAND
+```
+
+### 1.2 Flight Phases
+
+| Phase | Start | End | Duration | Notes |
+|-------|-------|-----|----------|-------|
+| Preflight | 14:30:00 | 14:32:07 | 02:07 | Systems check complete |
+| Takeoff | 14:32:07 | 14:32:42 | 00:35 | Nominal vertical climb |
+| Climb | 14:32:42 | 14:35:18 | 02:36 | Transit to survey altitude |
+| Survey | 14:35:18 | 15:01:44 | 26:26 | Grid pattern complete |
+| Descent | 15:01:44 | 15:05:12 | 03:28 | Controlled descent |
+| Landing | 15:05:12 | 15:06:24 | 01:12 | Precision landing |
+
+---
+
+## 2. Power System Analysis
+
+### 2.1 Battery Performance
+
+| Metric | Value | Limit | Status |
+|--------|-------|-------|--------|
+| Initial Voltage | 50.2 V | — | — |
+| Final Voltage | 44.8 V | >43.2 V | PASS |
+| Energy Consumed | 892 Wh | — | — |
+| Capacity Used | 78.4% | <85% | PASS |
+| Peak Discharge | 42.1 A | <50 A | PASS |
+| Cell Imbalance (final) | 38 mV | <100 mV | PASS |
+
+### 2.2 Voltage Profile
+
+```
+VOLTS
+ 51 ┤●
+ 50 ┤ ●●●
+ 49 ┤ ●●●●
+ 48 ┤ ●●●●●●
+ 47 ┤ ●●●●●●●●
+ 46 ┤ ●●●●●●●●●●
+ 45 ┤ ●●●●●●●●●●●●
+ 44 ┤ ●●●●●
+ └─────────────────────────────────────────────────────
+ 0 10 20 30 40 (min)
+```
+
+### 2.3 Current Distribution
+
+Average motor current during cruise phase:
+
+| Motor | Position | Avg Current | % of Total | Deviation |
+|-------|----------|-------------|------------|-----------|
+| M1 | Front-Left | 6.82 A | 24.8% | -0.8% |
+| M2 | Front-Right | 7.14 A | 26.0% | +0.4% |
+| M3 | Rear-Left | 6.91 A | 25.2% | -0.4% |
+| M4 | Rear-Right | 6.58 A | 24.0% | +0.8% |
+| **Total** | — | **27.45 A** | 100% | — |
+
+> Motor current deviation within ±3% indicates balanced thrust and proper CG alignment.
+
+---
+
+## 3. Navigation Performance
+
+### 3.1 GPS Quality
+
+| Parameter | Min | Max | Mean | Std Dev |
+|-----------|-----|-----|------|---------|
+| Satellites | 14 | 19 | 16.4 | 1.2 |
+| HDOP | 0.68 | 1.14 | 0.82 | 0.09 |
+| VDOP | 1.02 | 1.87 | 1.34 | 0.18 |
+| Fix Type | 3D RTK | 3D RTK | — | — |
+
+### 3.2 Position Accuracy
+
+Cross-track error during survey legs:
+
+| Leg | Length | Mean Error | Max Error | RMS |
+|-----|--------|------------|-----------|-----|
+| 1 | 423 m | 0.04 m | 0.12 m | 0.05 m |
+| 2 | 423 m | 0.03 m | 0.09 m | 0.04 m |
+| 3 | 423 m | 0.05 m | 0.14 m | 0.06 m |
+| 4 | 423 m | 0.03 m | 0.11 m | 0.04 m |
+| 5 | 423 m | 0.04 m | 0.08 m | 0.04 m |
+| 6 | 423 m | 0.06 m | 0.18 m | 0.07 m |
+| **Overall** | 2,538 m | 0.04 m | 0.18 m | 0.05 m |
+
+### 3.3 Altitude Hold Performance
+
+```
+Target: 80.0m AGL
+
+ERROR(m)
+ +1.0 ┤ ╷ ╷ ╷ ╷
+ +0.5 ┤──╷───┼───┼──╷───┼────╷───┼───╷──
+ 0.0 ┼──┼───┼───┼──┼───┼────┼───┼───┼──
+ -0.5 ┤──┼───┼───┼──┼───┼────┼───┼───┼──
+ -1.0 ┤ ╵ ╵ ╵ ╵ ╵
+ └────────────────────────────────────
+
+Mean: +0.08m | Std Dev: 0.31m | Max: +0.92m / -0.84m
+```
+
+---
+
+## 4. Environmental Data
+
+### 4.1 Atmospheric Conditions
+
+| Time | Temp | Humidity | Pressure | Wind Dir | Wind Spd |
+|------|------|----------|----------|----------|----------|
+| 14:30 | 12.4°C | 58% | 1018.2 hPa | 245° | 3.2 m/s |
+| 14:45 | 12.8°C | 56% | 1018.1 hPa | 238° | 4.1 m/s |
+| 15:00 | 13.1°C | 54% | 1018.0 hPa | 242° | 3.8 m/s |
+
+### 4.2 Wind Estimation (onboard)
+
+Derived from flight controller state estimation:
+
+| Altitude Band | Direction | Speed | Gust |
+|---------------|-----------|-------|------|
+| 0-25m AGL | 241° | 3.4 m/s | 5.1 m/s |
+| 25-50m AGL | 238° | 4.2 m/s | 6.3 m/s |
+| 50-75m AGL | 235° | 5.1 m/s | 7.8 m/s |
+| 75-100m AGL | 232° | 5.8 m/s | 8.4 m/s |
+
+---
+
+## 5. Anomalies & Events
+
+| Time | Severity | Code | Description |
+|------|----------|------|-------------|
+| 14:47:32 | INFO | NAV-101 | RTK float → RTK fix transition |
+| 14:52:18 | WARN | PWR-203 | Cell 4 temp elevated (38°C) |
+| 14:58:41 | INFO | NAV-101 | RTK fix → RTK float transition |
+| 14:59:02 | INFO | NAV-101 | RTK float → RTK fix transition |
+
+### 5.1 Event Analysis
+
+**PWR-203 (Cell 4 Temperature)**
+
+Cell 4 reached 38°C at 14:52:18, triggering a warning. Temperature returned to nominal (<35°C) within 4 minutes. Root cause: momentary high-current demand during wind gust compensation coinciding with reduced airflow from survey speed reduction.
+
+**Recommendation:** No action required. Temperature remained well below 45°C threshold.
+
+---
+
+## 6. Maintenance Indicators
+
+| Component | Metric | Current | Limit | Remaining |
+|-----------|--------|---------|-------|-----------|
+| Battery | Cycles | 47 | 300 | 253 |
+| Battery | Flight hours | 18.2 h | 100 h | 81.8 h |
+| Motors (all) | Flight hours | 42.6 h | 200 h | 157.4 h |
+| Props (all) | Flight hours | 12.4 h | 50 h | 37.6 h |
+| FC firmware | Version | 4.5.1 | — | Current |
+| Compass | Last cal | 2026-01-15 | 30 days | 17 days |
+
+---
+
+##### Data Files
+
+| File | Format | Size | Hash (SHA-256) |
+|------|--------|------|----------------|
+| `QV3-2026-0892.bin` | DataFlash | 48.2 MB | `a3f8c2...` |
+| `QV3-2026-0892.tlog` | MAVLink | 12.7 MB | `7b2e91...` |
+| `QV3-2026-0892.kmz` | KML Archive | 1.4 MB | `c94d03...` |
+
+---
+
+##### Report Generated
+
+```
+Timestamp: 2026-01-28T16:45:22Z
+Generator: Arrow Telemetry Analyzer v2.4.1
+Operator: J. Martinez
+Reviewed: K. Chen (Flight Ops Lead)
+```
diff --git a/docs/documentation/_category_.json b/docs/documentation/_category_.json
index 18fd577..bad8490 100644
--- a/docs/documentation/_category_.json
+++ b/docs/documentation/_category_.json
@@ -1,4 +1,6 @@
{
"label": "Documentation",
- "position": 3
+ "position": 5,
+ "collapsible": false,
+ "collapsed": false
}
diff --git a/docs/documentation/arrow-docs-info.md b/docs/documentation/arrow-docs-info.md
index 0d73ebe..2873b63 100644
--- a/docs/documentation/arrow-docs-info.md
+++ b/docs/documentation/arrow-docs-info.md
@@ -1,6 +1,8 @@
---
title: Arrow Docs Info
sidebar_position: 99
+sidebar_custom_props:
+ icon: doc
---
# Arrow Docs Info
diff --git a/docs/documentation/contracts/_category_.json b/docs/documentation/contracts/_category_.json
index 511c101..7b7fcf3 100644
--- a/docs/documentation/contracts/_category_.json
+++ b/docs/documentation/contracts/_category_.json
@@ -1,4 +1,11 @@
{
"label": "Arrow Contracts",
- "position": 2
+ "position": 2,
+ "link": {
+ "type": "doc",
+ "id": "documentation/contracts/index"
+ },
+ "customProps": {
+ "icon": "cube"
+ }
}
diff --git a/docs/documentation/contracts/intro.md b/docs/documentation/contracts/index.md
similarity index 94%
rename from docs/documentation/contracts/intro.md
rename to docs/documentation/contracts/index.md
index 87f7676..f1cc623 100644
--- a/docs/documentation/contracts/intro.md
+++ b/docs/documentation/contracts/index.md
@@ -1,6 +1,7 @@
---
sidebar_position: 1
title: Introduction
+hide_table_of_contents: true
---
# Introduction to Arrow Contracts
diff --git a/docs/documentation/glossary.mdx b/docs/documentation/glossary.mdx
index 3263ed3..f160588 100644
--- a/docs/documentation/glossary.mdx
+++ b/docs/documentation/glossary.mdx
@@ -1,9 +1,10 @@
---
sidebar_position: 3
+sidebar_custom_props:
+ icon: book
---
import { data, columns } from './GlossaryData'
-import "/css/arrow.webflow.css"
# Glossary
:mag: *Use the search bar to see terms in this glossary from anywhere on the
diff --git a/docs/documentation/references.md b/docs/documentation/references.md
index 6327705..4591c72 100644
--- a/docs/documentation/references.md
+++ b/docs/documentation/references.md
@@ -1,5 +1,7 @@
---
sidebar_position: 4
+sidebar_custom_props:
+ icon: link
---
# References
@@ -23,8 +25,6 @@ https://ree.auto/
Fully open source looking chassis design from Open Motors
https://www.openmotors.co/product/tabbyevo/
-Chinese open standard for EVs, seems they are trying to establish standards for EV architecture as we speak.
-https://www.polestar-forum.com/threads/geely-holding-launches-open-source-electric-vehicle-architecture.495/
Autoware Software Designed Vehicle standards, github to control systems below, full stack view of a control system
https://autoware.org/open-ad-kit/
diff --git a/docs/intro.md b/docs/intro.md
deleted file mode 100644
index fe764e4..0000000
--- a/docs/intro.md
+++ /dev/null
@@ -1,33 +0,0 @@
----
-sidebar_position: 1
----
-
-# About Arrow
-
-#### What is Arrow?
-
-Arrow is a global community collaboratively designing and building open source aircraft. We're an internet native organization and use an Ethereum based token to govern ourselves and fund our projects. So far, we've designed a multipurpose quadcopter - Project Quiver. Quiver is currently complete as a devkit and we have units available to loan out to people who wish to develop attachments or features for it. Our projects in current development include a larger multirotor and a small fixed wing drone. We're working towards our goal of building cargo drones and manned aircraft at scale that will achieve Arrow's mission to **increase physical connectedness to the people and places you love**. We lean in heavily towards openness and collaboration. If you're interested in what we're building, please feel welcome to follow along and join in.
-
-#### Arrow's Organizational Structure
-
-Arrow has passionate community members and contributors scattered all over the world. We all work together online to design aircraft hardware and periodically have in person meetups to spend quality time together and assemble our designs. Meetings and informal chat mostly take place via Discord, and design and code all stays on Github. Our organization lives online first and foremost. We don't have any offices or "official" in-person presence. The individuals and companies in our community work to manufacture and deploy our designs in the real world.
-
-We're structured as a Decentralized Autonomous Organization (DAO) on the Ethereum blockchain. We have our own token that is distributed to our contributors. We use it to govern over our shared treasury and make governance decisions about where to focus the organization. Arrow is *not* a company in the traditional sense. We don't have any fiduciary responsibility to token holders and we mostly are doing this out of our own passion to build technology that we see as important for humanity. If you become a token holder, do so out of shared commitment to our vision rather than any expectation of future reward.
-
-If you want to learn more about or participate in Arrow's governance, please see our [DAO forum](https://dao.arrowair.com/) and [Snapshot](https://snapshot.box/#/s:arrowair.eth) voting page.
-
-#### Can Arrow really build hardware like this?
-
-We think so. The software world has clearly shown that open-source is a viable way to build large and successful projects, and we think hardware is starting to look a lot more like software. The tools for design and simulation have gotten advanced enough to solve many problems collaboratively and without requiring hands on hardware. AI tools are only going to increase the efficacy of designing hardware online. A group of engineers working online are able to accomplish things that previously would have required a large team working in person as AI handles much of the administration and legwork.Being internet-first allows us to welcome talented engineers from all over the world, not just from one city. The coordination penalty of a distributed community may not actually be much of a penalty at all.
-
-We believe that advances in physical AI will quickly follow the advances that we've already seen with LLM-style AI. Humanoid robots may replace our need for large numbers of technicians on the ground, and more specialized robots can handle factory tasks. On-demand manufacturing services that already exist today will likely evolve into something that more resembles AWS for the real world - an army of physical workers ready to be engaged programmatically, just like spinning up an AWS instance.
-
-A distributed community can also be a huge asset for scaling designs out into the world quickly. Instead of vertical scaling (think giant gigafactory), Arrow optimizes for *horizontal* scaling - we build our designs everywhere, all at once, using our global community.
-
-#### Why is this important?
-
-Arrow has a very optimistic culture. We believe that the world can and will be much better in the future, if we build it. That's not to say that we don't see problems in the world - we do. Aerospace especially is dominated by bloated defense contracts and a mentality of guarding secrets. Hardly anyone is working in public trying to genuinely build aircraft for the betterment of humanity.
-
-We believe that a scaled network of automated VTOL aircraft can improve life for humanity in an incredibly meaningful way. VTOL aircraft require minimal physical infrastructure on the ground and lend themselves well to direct point-to-point flights, instead of routing through a central hub. In that world, people can live anywhere they want and maintain an affordable and fast physical link to the people they love and the things they need, no matter where they are.
-
-Moreover, we think that building towards our vision as a decentralized community can set a positive example for how humanity can put aside differences and work together for an optimistic future. We hope that other communities will be inspired by Arrow to coordinate together online to build their visions for the future.
diff --git a/docs/kitchen-sink.md b/docs/kitchen-sink.md
new file mode 100644
index 0000000..4d243a4
--- /dev/null
+++ b/docs/kitchen-sink.md
@@ -0,0 +1,195 @@
+---
+sidebar_custom_props:
+ icon: doc
+---
+
+# Kitchen Sink
+
+A preview of all documentation styles.
+
+## Typography
+
+### Headings
+
+# Heading 1
+## Heading 2
+### Heading 3
+#### Heading 4
+##### Heading 5
+###### Heading 6
+
+### Body Text
+
+This is a regular paragraph with **bold text**, *italic text*, and ***bold italic text***. Here's some `inline code` and a [link to somewhere](#).
+
+This is a second paragraph. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris.
+
+### Lists
+
+Unordered list:
+- First item
+- Second item
+ - Nested item
+ - Another nested item
+- Third item
+
+Ordered list:
+1. First step
+2. Second step
+ 1. Sub-step one
+ 2. Sub-step two
+3. Third step
+
+Task list:
+- [x] Completed task
+- [ ] Incomplete task
+- [ ] Another task
+
+---
+
+## Code
+
+Inline: Use `npm install` to install dependencies.
+
+```javascript
+// JavaScript code block
+function greet(name) {
+ console.log(`Hello, ${name}!`);
+ return true;
+}
+```
+
+```rust
+// Rust code block
+fn main() {
+ println!("Hello, world!");
+ let x: i32 = 42;
+}
+```
+
+```bash
+# Shell commands
+npm run build
+git commit -m "Update styles"
+```
+
+---
+
+## Tables
+
+| Property | Type | Default | Description |
+|----------|------|---------|-------------|
+| `enabled` | boolean | `true` | Enable the feature |
+| `timeout` | number | `3000` | Timeout in milliseconds |
+| `retries` | number | `3` | Number of retry attempts |
+| `mode` | string | `"auto"` | Operating mode |
+
+Right-aligned numbers:
+
+| Component | Version | Downloads |
+|:----------|:-------:| ---------:|
+| React | 18.2.0 | 1,234,567 |
+| Vue | 3.4.0 | 987,654 |
+| Svelte | 4.2.0 | 456,789 |
+
+---
+
+## Blockquotes
+
+> This is a simple blockquote. It can span multiple lines and contain **formatted text**.
+
+> **Note:** This is a note-style blockquote with a bold prefix.
+
+:::note
+This is a Docusaurus admonition note.
+:::
+
+:::tip
+This is a tip admonition.
+:::
+
+:::info
+This is an info admonition.
+:::
+
+:::caution
+This is a caution admonition.
+:::
+
+:::danger
+This is a danger admonition.
+:::
+
+---
+
+## Images
+
+
+
+---
+
+## Horizontal Rules
+
+Above the line.
+
+---
+
+Below the line.
+
+***
+
+Another style.
+
+---
+
+## Details/Accordion
+
+
+Click to expand
+
+This is hidden content that appears when you expand the details element.
+
+- It can contain lists
+- And other **formatted** content
+- Including `code`
+
+
+
+---
+
+## Definition List (HTML)
+
+
+ - Term 1
+ - Definition for term 1
+ - Term 2
+ - Definition for term 2
+
+
+---
+
+## Keyboard Shortcuts
+
+Press Ctrl + C to copy.
+
+Press Cmd + Shift + P to open command palette.
+
+---
+
+## Footnotes
+
+Here's a sentence with a footnote[^1].
+
+[^1]: This is the footnote content.
+
+---
+
+## Math (if enabled)
+
+Inline math: $E = mc^2$
+
+Block math:
+
+$$
+\sum_{i=1}^{n} x_i = x_1 + x_2 + \cdots + x_n
+$$
diff --git a/docusaurus.config.js b/docusaurus.config.js
index 9f34aea..39f9f03 100644
--- a/docusaurus.config.js
+++ b/docusaurus.config.js
@@ -1,6 +1,7 @@
// @ts-check
// Note: type annotations allow type checking and IDEs autocompletion
+const path = require('path');
const { themes } = require("prism-react-renderer");
const lightCodeTheme = themes.github;
const darkCodeTheme = themes.dracula;
@@ -8,6 +9,31 @@ const darkCodeTheme = themes.dracula;
// External docs config - shared with import script (external-docs.json)
const externalDocs = require('./external-docs.json');
+// Custom plugin: prevent docs/project-quiver/ files from being processed by the
+// main docs preset's MDX webpack loader (they are handled by the quiver plugin instance).
+function excludeProjectQuiverFromMainDocsLoader() {
+ const projectQuiverPath = path.resolve(__dirname, 'docs', 'project-quiver');
+ const docsPath = path.resolve(__dirname, 'docs') + path.sep;
+ return {
+ name: 'exclude-project-quiver-from-main-mdx-loader',
+ configureWebpack(config) {
+ for (const rule of (config.module?.rules ?? [])) {
+ if (!rule || typeof rule !== 'object' || !Array.isArray(rule.include)) continue;
+ // Identify the main docs MDX rule: includes 'docs/' but not 'project-quiver'
+ if (rule.include.some(d => d === docsPath) &&
+ !rule.include.some(d => typeof d === 'string' && d.includes('project-quiver'))) {
+ rule.exclude = (Array.isArray(rule.exclude)
+ ? rule.exclude
+ : rule.exclude ? [rule.exclude] : []
+ ).concat(projectQuiverPath);
+ break;
+ }
+ }
+ return {};
+ },
+ };
+}
+
/** @type {import('@docusaurus/types').Config} */
const config = {
title: "Arrow",
@@ -15,7 +41,7 @@ const config = {
url: "https://arrowair.com",
baseUrl: "/",
onBrokenLinks: "warn",
- favicon: "img/favicon.ico",
+ favicon: "images/favicon.png",
organizationName: "Arrow", // Usually your GitHub org/user name.
projectName: "arrow", // Usually your repo name.
@@ -35,7 +61,7 @@ const config = {
indexDocs: true,
indexBlog: true,
blogDir: "blog/",
- docsDir: "docs/",
+ docsDir: ["docs", "docs-quiver", "docs-spearhead", "docs-flight-tracking", "docs-bounty"],
language: "en",
searchResultLimits: 8,
highlightSearchTermsOnTargetPage: true,
@@ -45,11 +71,52 @@ const config = {
],
],
+ clientModules: [
+ require.resolve('./src/js/imageCollapse.js'),
+ ],
+
+ plugins: [
+ excludeProjectQuiverFromMainDocsLoader,
+ require.resolve('./plugins/dev-homepage'),
+ ['@docusaurus/plugin-content-docs', {
+ id: 'quiver',
+ path: 'docs/project-quiver',
+ routeBasePath: 'quiver',
+ sidebarPath: require.resolve('./sidebars-quiver.js'),
+ editUrl: 'https://github.com/Arrow-air/project-quiver/edit/main/docs/',
+ showLastUpdateTime: true,
+ }],
+ ['@docusaurus/plugin-content-docs', {
+ id: 'spearhead',
+ path: 'docs-spearhead',
+ routeBasePath: 'spearhead',
+ sidebarPath: require.resolve('./sidebars-spearhead.js'),
+ editUrl: 'https://github.com/Arrow-air/website/edit/staging/docs-spearhead/',
+ showLastUpdateTime: true,
+ }],
+ ['@docusaurus/plugin-content-docs', {
+ id: 'flight-tracking',
+ path: 'docs-flight-tracking',
+ routeBasePath: 'flight-tracking',
+ sidebarPath: require.resolve('./sidebars-flight-tracking.js'),
+ editUrl: 'https://github.com/Arrow-air/website/edit/staging/docs-flight-tracking/',
+ showLastUpdateTime: true,
+ }],
+ ['@docusaurus/plugin-content-docs', {
+ id: 'bounty',
+ path: 'docs-bounty',
+ routeBasePath: 'bounty',
+ sidebarPath: require.resolve('./sidebars-bounty.js'),
+ editUrl: 'https://github.com/Arrow-air/website/edit/staging/docs-bounty/',
+ showLastUpdateTime: true,
+ }],
+ ],
+
stylesheets: [
{ href: "https://fonts.googleapis.com", rel: "preconnect" },
{ href: "https://fonts.gstatic.com", rel: "preconnect" },
{
- href: "https://fonts.googleapis.com/css2?family=Karla:wght@400;700&family=Rubik:wght@400;700&display=swap",
+ href: "https://fonts.googleapis.com/css2?family=IBM+Plex+Sans:wght@400;500;600;700&family=Karla:wght@400;700&family=Rubik:wght@400;700&display=swap",
},
],
@@ -60,6 +127,8 @@ const config = {
({
docs: {
sidebarPath: require.resolve("./sidebars.js"),
+ exclude: ['**/project-quiver/**'], // served by the separate quiver plugin instance
+ showLastUpdateTime: true,
editUrl: ({ docPath }) => {
// Check if this doc is from an external repo
for (const [folder, config] of Object.entries(externalDocs)) {
@@ -106,7 +175,9 @@ const config = {
/** @type {import('@docusaurus/preset-classic').ThemeConfig} */
({
colorMode: {
- disableSwitch: true,
+ defaultMode: 'light',
+ disableSwitch: false,
+ respectPrefersColorScheme: false,
},
docs: {
sidebar: {
@@ -121,25 +192,20 @@ const config = {
},
items: [
{
- type: "doc",
- docId: "intro",
+ type: "search",
position: "right",
- label: "Docs",
- className: "text-secondary",
},
{
- to: "/blog",
+ href: "https://github.com/Arrow-air",
position: "right",
- label: "Blog",
- className: "text-secondary",
- image: "img/arrow-icon_blog.svg",
+ className: "navbar-icon navbar-icon--github",
+ "aria-label": "GitHub",
},
{
href: "https://discord.com/invite/arrow",
position: "right",
- label: "Discord",
- className: "text-secondary",
- image: "img/arrow-icon_discord.svg",
+ className: "navbar-icon navbar-icon--discord",
+ "aria-label": "Discord",
},
],
},
diff --git a/external-docs.json b/external-docs.json
index 982949d..1765a91 100644
--- a/external-docs.json
+++ b/external-docs.json
@@ -1,9 +1,9 @@
{
- "project-quiver": {
- "repo": "Arrow-air/project-quiver",
- "branch": "docs-refactor",
- "docsPath": "docs",
- "sidebarLabel": "Project Quiver",
- "sidebarPosition": 4
- }
+ "project-quiver": {
+ "repo": "Arrow-air/project-quiver",
+ "branch": "main",
+ "docsPath": "docs",
+ "sidebarLabel": "Project Quiver",
+ "sidebarPosition": 1
+ }
}
diff --git a/package-lock.json b/package-lock.json
index ac7ce3c..7a144e9 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -14,6 +14,8 @@
"@mdx-js/react": "^3.1.0",
"clsx": "^2.1.1",
"gts": "^3.1.0",
+ "lottie-web": "^5.13.0",
+ "motion": "^12.34.3",
"prism-react-renderer": "^2.4.1",
"react": "^18.3.1",
"react-dom": "^18.3.1",
@@ -22,6 +24,7 @@
},
"devDependencies": {
"@docusaurus/module-type-aliases": "^3.7.0",
+ "playwright": "^1.58.2",
"typescript": "^5.7.3"
}
},
@@ -9595,6 +9598,33 @@
"url": "https://github.com/sponsors/rawify"
}
},
+ "node_modules/framer-motion": {
+ "version": "12.34.3",
+ "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-12.34.3.tgz",
+ "integrity": "sha512-v81ecyZKYO/DfpTwHivqkxSUBzvceOpoI+wLfgCgoUIKxlFKEXdg0oR9imxwXumT4SFy8vRk9xzJ5l3/Du/55Q==",
+ "license": "MIT",
+ "dependencies": {
+ "motion-dom": "^12.34.3",
+ "motion-utils": "^12.29.2",
+ "tslib": "^2.4.0"
+ },
+ "peerDependencies": {
+ "@emotion/is-prop-valid": "*",
+ "react": "^18.0.0 || ^19.0.0",
+ "react-dom": "^18.0.0 || ^19.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@emotion/is-prop-valid": {
+ "optional": true
+ },
+ "react": {
+ "optional": true
+ },
+ "react-dom": {
+ "optional": true
+ }
+ }
+ },
"node_modules/fresh": {
"version": "0.5.2",
"resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
@@ -11371,6 +11401,12 @@
"loose-envify": "cli.js"
}
},
+ "node_modules/lottie-web": {
+ "version": "5.13.0",
+ "resolved": "https://registry.npmjs.org/lottie-web/-/lottie-web-5.13.0.tgz",
+ "integrity": "sha512-+gfBXl6sxXMPe8tKQm7qzLnUy5DUPJPKIyRHwtpCpyUEYjHYRJC/5gjUvdkuO2c3JllrPtHXH5UJJK8LRYl5yQ==",
+ "license": "MIT"
+ },
"node_modules/lower-case": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz",
@@ -13809,6 +13845,47 @@
}
}
},
+ "node_modules/motion": {
+ "version": "12.34.3",
+ "resolved": "https://registry.npmjs.org/motion/-/motion-12.34.3.tgz",
+ "integrity": "sha512-xZIkBGO7v/Uvm+EyaqYd+9IpXu0sZqLywVlGdCFrrMiaO9JI4Kx51mO9KlHSWwll+gZUVY5OJsWgYI5FywJ/tw==",
+ "license": "MIT",
+ "dependencies": {
+ "framer-motion": "^12.34.3",
+ "tslib": "^2.4.0"
+ },
+ "peerDependencies": {
+ "@emotion/is-prop-valid": "*",
+ "react": "^18.0.0 || ^19.0.0",
+ "react-dom": "^18.0.0 || ^19.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@emotion/is-prop-valid": {
+ "optional": true
+ },
+ "react": {
+ "optional": true
+ },
+ "react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/motion-dom": {
+ "version": "12.34.3",
+ "resolved": "https://registry.npmjs.org/motion-dom/-/motion-dom-12.34.3.tgz",
+ "integrity": "sha512-sYgFe+pR9aIM7o4fhs2aXtOI+oqlUd33N9Yoxcgo1Fv7M20sRkHtCmzE/VRNIcq7uNJ+qio+Xubt1FXH3pQ+eQ==",
+ "license": "MIT",
+ "dependencies": {
+ "motion-utils": "^12.29.2"
+ }
+ },
+ "node_modules/motion-utils": {
+ "version": "12.29.2",
+ "resolved": "https://registry.npmjs.org/motion-utils/-/motion-utils-12.29.2.tgz",
+ "integrity": "sha512-G3kc34H2cX2gI63RqU+cZq+zWRRPSsNIOjpdl9TN4AQwC4sgwYPl/Q/Obf/d53nOm569T0fYK+tcoSV50BWx8A==",
+ "license": "MIT"
+ },
"node_modules/mrmime": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz",
@@ -14617,6 +14694,53 @@
"node": ">=16.0.0"
}
},
+ "node_modules/playwright": {
+ "version": "1.58.2",
+ "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.58.2.tgz",
+ "integrity": "sha512-vA30H8Nvkq/cPBnNw4Q8TWz1EJyqgpuinBcHET0YVJVFldr8JDNiU9LaWAE1KqSkRYazuaBhTpB5ZzShOezQ6A==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "playwright-core": "1.58.2"
+ },
+ "bin": {
+ "playwright": "cli.js"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "optionalDependencies": {
+ "fsevents": "2.3.2"
+ }
+ },
+ "node_modules/playwright-core": {
+ "version": "1.58.2",
+ "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.58.2.tgz",
+ "integrity": "sha512-yZkEtftgwS8CsfYo7nm0KE8jsvm6i/PTgVtB8DL726wNf6H2IMsDuxCpJj59KDaxCtSnrWan2AeDqM7JBaultg==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "bin": {
+ "playwright-core": "cli.js"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/playwright/node_modules/fsevents": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
+ "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
+ "dev": true,
+ "hasInstallScript": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
+ }
+ },
"node_modules/pluralize": {
"version": "8.0.0",
"resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz",
diff --git a/package.json b/package.json
index ef3c51d..3a22a82 100644
--- a/package.json
+++ b/package.json
@@ -4,10 +4,11 @@
"private": true,
"scripts": {
"import-docs": "bash scripts/import-external-docs.sh",
- "prestart": "bash scripts/import-external-docs.sh",
- "prebuild": "bash scripts/import-external-docs.sh",
+ "prestart": "node scripts/build-html.js && bash scripts/import-external-docs.sh",
+ "watch-templates": "node scripts/build-html.js --watch",
+ "prebuild": "node scripts/build-html.js && bash scripts/import-external-docs.sh",
"docusaurus": "docusaurus",
- "start": "docusaurus start",
+ "start": "node scripts/build-html.js --watch & docusaurus start",
"build": "docusaurus build",
"swizzle": "docusaurus swizzle",
"deploy": "docusaurus deploy",
@@ -24,6 +25,8 @@
"@mdx-js/react": "^3.1.0",
"clsx": "^2.1.1",
"gts": "^3.1.0",
+ "lottie-web": "^5.13.0",
+ "motion": "^12.34.3",
"prism-react-renderer": "^2.4.1",
"react": "^18.3.1",
"react-dom": "^18.3.1",
@@ -32,6 +35,7 @@
},
"devDependencies": {
"@docusaurus/module-type-aliases": "^3.7.0",
+ "playwright": "^1.58.2",
"typescript": "^5.7.3"
},
"browserslist": {
diff --git a/plugins/dev-homepage.js b/plugins/dev-homepage.js
new file mode 100644
index 0000000..daa9065
--- /dev/null
+++ b/plugins/dev-homepage.js
@@ -0,0 +1,67 @@
+// In dev mode, Docusaurus's HtmlWebpackPlugin emits index.html (the SPA
+// shell) which conflicts with our static/index.html (the custom homepage).
+//
+// This plugin excludes index.html from webpack's CopyPlugin (avoiding
+// the conflict) and adds Express middleware to serve our custom homepage
+// at / and /index.html before the SPA fallback handles them.
+//
+// In production builds, this plugin does nothing — Docusaurus copies
+// static files after page generation, so static/index.html wins naturally.
+
+const fs = require('fs');
+const path = require('path');
+
+module.exports = function devHomepage() {
+ return {
+ name: 'dev-homepage',
+ configureWebpack(config, isServer) {
+ if (isServer || process.env.NODE_ENV === 'production') return {};
+
+ // Exclude index.html from CopyPlugin so it doesn't conflict
+ // with Docusaurus's HtmlWebpackPlugin SPA shell
+ for (const plugin of (config.plugins || [])) {
+ if (plugin.constructor?.name === 'CopyPlugin' && Array.isArray(plugin.patterns)) {
+ for (const pattern of plugin.patterns) {
+ if (!pattern.globOptions) pattern.globOptions = {};
+ if (!pattern.globOptions.ignore) pattern.globOptions.ignore = [];
+ pattern.globOptions.ignore.push('**/index.html');
+ }
+ }
+ }
+
+ // Wrap setupMiddlewares to serve our homepage at / before
+ // Docusaurus's historyApiFallback rewrites it to the SPA shell
+ const siteDir = config.context || process.cwd();
+ const homepagePath = path.join(siteDir, 'static', 'index.html');
+ const existingSetup = config.devServer?.setupMiddlewares;
+
+ if (!config.devServer) config.devServer = {};
+ config.devServer.setupMiddlewares = (middlewares, devServer) => {
+ let result = existingSetup
+ ? existingSetup(middlewares, devServer)
+ : middlewares;
+
+ result.unshift({
+ name: 'custom-homepage',
+ middleware: (req, res, next) => {
+ if (req.url === '/' || req.url === '/index.html') {
+ try {
+ const html = fs.readFileSync(homepagePath, 'utf8');
+ res.setHeader('Content-Type', 'text/html; charset=utf-8');
+ res.end(html);
+ return;
+ } catch (e) {
+ // File missing — fall through to Docusaurus
+ }
+ }
+ next();
+ },
+ });
+
+ return result;
+ };
+
+ return {};
+ },
+ };
+};
diff --git a/scripts/build-html.js b/scripts/build-html.js
new file mode 100644
index 0000000..8d3bb58
--- /dev/null
+++ b/scripts/build-html.js
@@ -0,0 +1,147 @@
+#!/usr/bin/env node
+//
+// Build-time template assembler for static HTML pages.
+//
+// The site's navbar and footer are shared across 5 static pages (index,
+// quiver, blank, engineering, community). Rather than duplicating that
+// markup in every file, we keep one copy of each shared section in
+// templates/partials/ and stitch them together here.
+//
+// How it works:
+// 1. Read the page skeleton from templates/base.html
+// 2. For each JSON config in templates/pages/*.json
+// - Inline the shared partials (navbar, footer, head, global-styles)
+// - Substitute per-page values (title, meta tags, body content, etc.)
+// - Write the assembled HTML to static/.html
+//
+// The JSON configs describe each page — title, Webflow page ID, which
+// body-content file to slot in, any extra links or `;
+
+function loadBaseTemplate() {
+ return fs.readFileSync(path.join(TEMPLATES, 'base.html'), 'utf8')
+ .replace(/^\n/, '');
+}
+
+// Replace {{INCLUDE:partials/foo.html}} lines with the actual file contents.
+function resolveIncludes(html) {
+ return html.replace(/^{{INCLUDE:(.+?)}}$/gm, (_, filePath) => {
+ return fs.readFileSync(path.join(TEMPLATES, filePath), 'utf8').trimEnd();
+ });
+}
+
+// Replace a {{PLACEHOLDER}} line with a value. If the value is empty,
+// collapse the blank line so we don't leave stray whitespace in the output.
+function replacePlaceholder(html, placeholder, value) {
+ const escaped = placeholder.replace(/[{}]/g, '\\$&');
+ if (value) {
+ return html.replace(new RegExp('^' + escaped + '$', 'm'), value);
+ }
+ return html.replace(new RegExp('\\n?' + escaped + '\\n?'), '\n');
+}
+
+function buildAll() {
+ const baseTemplate = loadBaseTemplate();
+ const configs = fs.readdirSync(PAGES_DIR).filter(f => f.endsWith('.json'));
+
+ for (const configFile of configs) {
+ const config = JSON.parse(fs.readFileSync(path.join(PAGES_DIR, configFile), 'utf8'));
+ let html = baseTemplate;
+
+ html = resolveIncludes(html);
+ html = html.replace(/{{WF_PAGE_ID}}/g, config.wfPageId || '');
+ html = html.replace('{{TITLE}}', config.title || '');
+
+ const metaTags = (config.metaTags || []).map(t => ' ' + t).join('\n');
+ html = replacePlaceholder(html, '{{META_TAGS}}', metaTags);
+ html = replacePlaceholder(html, '{{EXTRA_HEAD}}', config.extraHead || '');
+
+ let bodyContent = '';
+ if (config.bodyFile) {
+ bodyContent = fs.readFileSync(path.join(PAGES_DIR, config.bodyFile), 'utf8').trimEnd();
+ }
+ html = replacePlaceholder(html, '{{CONTENT}}', bodyContent);
+
+ let extraScripts = '';
+ if (config.extraScriptsFile) {
+ extraScripts = fs.readFileSync(path.join(PAGES_DIR, config.extraScriptsFile), 'utf8').trimEnd();
+ }
+ html = replacePlaceholder(html, '{{EXTRA_SCRIPTS}}', extraScripts);
+
+ // In watch mode, inject livereload script before
+ if (watchMode) {
+ html = html.replace('