diff --git a/.dockerignore b/.dockerignore
new file mode 100644
index 0000000..f248dd6
--- /dev/null
+++ b/.dockerignore
@@ -0,0 +1,8 @@
+node_modules
+.next
+.git
+.env*
+.DS_Store
+Dockerfile.runner
+docker-compose.runner.yml
+runner-data
diff --git a/.gitea/workflows/deploy.yml b/.gitea/workflows/deploy.yml
new file mode 100644
index 0000000..d5de311
--- /dev/null
+++ b/.gitea/workflows/deploy.yml
@@ -0,0 +1,24 @@
+name: Build and Deploy
+
+on:
+ push:
+ branches:
+ - main
+
+jobs:
+ deploy:
+ runs-on: self-hosted
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v4
+
+ - name: Build Docker image
+ run: |
+ SHA=$(echo "${{ gitea.sha }}" | cut -c1-7)
+ docker build -t micromelon-website:$SHA -t micromelon-website:latest .
+
+ - name: Restart container
+ run: docker compose -f /opt/micromelon/docker-compose.yml up -d
+
+ - name: Prune old images
+ run: docker image prune -f
diff --git a/Dockerfile b/Dockerfile
new file mode 100644
index 0000000..a5cf743
--- /dev/null
+++ b/Dockerfile
@@ -0,0 +1,24 @@
+FROM node:22-bookworm-slim AS deps
+WORKDIR /app
+COPY package.json package-lock.json ./
+RUN npm ci
+
+FROM node:22-bookworm-slim AS builder
+WORKDIR /app
+COPY --from=deps /app/node_modules ./node_modules
+COPY . .
+RUN npm run build
+
+FROM node:22-bookworm-slim AS runner
+WORKDIR /app
+ENV NODE_ENV=production
+RUN addgroup --system --gid 1001 nodejs && \
+ adduser --system --uid 1001 nextjs
+COPY --from=builder /app/public ./public
+COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./
+COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static
+USER nextjs
+EXPOSE 3000
+ENV PORT=3000
+ENV HOSTNAME="0.0.0.0"
+CMD ["node", "server.js"]
diff --git a/Dockerfile.runner b/Dockerfile.runner
new file mode 100644
index 0000000..38d3da3
--- /dev/null
+++ b/Dockerfile.runner
@@ -0,0 +1,2 @@
+FROM gitea/act_runner:latest
+RUN apk add --no-cache docker-cli docker-cli-compose git bash nodejs
diff --git a/content/resources/introducing-the-micromelon-vs-code-extension.mdx b/content/resources/introducing-the-micromelon-vs-code-extension.mdx
new file mode 100644
index 0000000..8d625b0
--- /dev/null
+++ b/content/resources/introducing-the-micromelon-vs-code-extension.mdx
@@ -0,0 +1,61 @@
+---
+title: "Introducing the Micromelon VS Code Extension"
+date: "2026-03-04"
+categories: ["News & Updates"]
+tags: ["Python", "VS Code", "Advanced"]
+excerpt: "Connect to your rover, run Python scripts, and view live sensor data — all without leaving VS Code."
+featuredImage: "/images/products/vscode-extension-sidebar.png"
+---
+
+We're excited to announce the release of the **Micromelon VS Code Extension** — a free extension that brings full rover control into the world's most popular code editor.
+
+Whether your students are ready to graduate from the Micromelon Code Editor or you're a developer looking to integrate rover control into a bigger project, the VS Code extension makes it easy to connect, code, and run — all from one place.
+
+## What It Does
+
+The extension adds a dedicated Micromelon panel to VS Code's sidebar. From there, students can:
+
+- **Connect to any rover** over Bluetooth Low Energy with a single click
+- **Run Python scripts** on the rover instantly with F5
+- **View live sensor data** — ultrasonic, colour, IR, accelerometer, and gyroscope — updated in real time
+- **Use built-in code snippets** — type `mm-` to access ready-made templates for motors, sensors, LEDs, and sounds
+
+It works with both physical Micromelon Rovers and the Robot Simulator, so students can test and iterate without hardware.
+
+## Why VS Code?
+
+VS Code is the most widely used code editor in the world, and it's free. Many schools already have it installed. By meeting students where they are, the extension removes friction and lets them focus on writing Python — not learning a new tool.
+
+It's also the natural next step in the Micromelon learning pathway. Students who started with simplified blocks in Junior, progressed through the Code Editor's block and text modes, and are now ready for a professional development environment can make the jump without losing access to their rover.
+
+## Getting Started
+
+1. Install [VS Code](https://code.visualstudio.com/) (free)
+2. Search for **Micromelon** in the Extensions marketplace and install
+3. Install the Python library: `pip install micromelon`
+4. Click the Micromelon icon in the sidebar and connect to your rover
+5. Write your first script and hit F5
+
+That's it — students can go from install to running code on a real robot in minutes.
+
+## Built-In Code Snippets
+
+The extension includes snippets for common tasks so students don't have to memorise the API. Type `mm-` and VS Code will suggest completions like:
+
+- `mm-connect` — Connect to a rover by ID
+- `mm-motors` — Drive forward, backward, and turn
+- `mm-sensors` — Read ultrasonic, colour, and IR sensors
+- `mm-leds` — Set LED colours
+- `mm-sounds` — Play notes and melodies
+
+Each snippet includes comments explaining what the code does, making them useful as learning tools as well as shortcuts.
+
+## Works With the Simulator
+
+Don't have a physical rover handy? The extension connects to the Micromelon Robot Simulator just as easily. Students can develop and test their code in the simulator, then deploy the exact same script to a real rover when they're ready.
+
+## Download
+
+The Micromelon VS Code Extension is available now for free on the [VS Code Marketplace](/download). It works on Windows and macOS.
+
+Ready to try it? Head to the [Python page](/python) to learn more, or [download everything you need](/download) to get started.
diff --git a/content/resources/rover-repairs-made-easy-with-online-return-requests.mdx b/content/resources/rover-repairs-made-easy-with-online-return-requests.mdx
new file mode 100644
index 0000000..3eb1fe5
--- /dev/null
+++ b/content/resources/rover-repairs-made-easy-with-online-return-requests.mdx
@@ -0,0 +1,51 @@
+---
+title: "Rover Repairs Made Easy With Online Return Requests"
+date: "2026-03-04"
+categories: ["News & Updates"]
+tags: []
+excerpt: "Submit a repair request online, get approved in under an hour, and receive everything you need to send your rover back for diagnosis and repair."
+featuredImage: "/images/products/rover-render.jpg"
+---
+
+We know that when a rover goes down in a busy classroom, you need it fixed fast. That's why we've made the repair process as simple as possible — no phone calls, no back-and-forth emails. Just a quick online form and we handle the rest.
+
+## How It Works
+
+The entire process starts from our [Rover Repair Request](/rover-repair-request) page. Here's what to expect:
+
+### 1. Submit the Form
+
+Head to the [Rover Repair Request](/rover-repair-request) page and fill in your details — your name, school, contact info, and which rovers need attention. You can describe the issue and submit multiple rovers in a single request.
+
+The form takes less than two minutes to complete.
+
+### 2. Fast Approval
+
+Our team reviews every request and typically approves them **within one hour** during business hours. There's no waiting days for a support ticket to be picked up.
+
+### 3. RMA Form & Instructions
+
+Once approved, you'll receive an email with a PDF containing your **RMA (Return Merchandise Authorisation) form** and step-by-step instructions for packaging and shipping your rover back to us.
+
+Everything you need is in that one email — no hunting through support portals or knowledge bases.
+
+### 4. Diagnosis & Repair
+
+When we receive your rover, our team will diagnose the issue and carry out the repair. We'll keep you updated throughout the process and get your rover back to you as quickly as possible.
+
+## Why We Built This
+
+Teachers are busy. The last thing you need when a rover stops working is to navigate a complicated support process. We wanted something that respects your time:
+
+- **No phone queues** — submit a request whenever it suits you
+- **No waiting** — approvals typically happen within an hour
+- **One email** — everything you need arrives in a single PDF
+- **Transparent** — you always know where your rover is in the process
+
+## Covered Under Warranty
+
+Every Micromelon Rover comes with a **12-month warranty** covering manufacturing defects. If your rover is within warranty, repairs are covered at no cost. For out-of-warranty rovers, we'll provide a quote before proceeding with any work.
+
+## Get Started
+
+If you have a rover that needs attention, head to the [Rover Repair Request](/rover-repair-request) page and submit your request. We'll take it from there.
diff --git a/docker-compose.runner.yml b/docker-compose.runner.yml
new file mode 100644
index 0000000..ca52127
--- /dev/null
+++ b/docker-compose.runner.yml
@@ -0,0 +1,18 @@
+services:
+ runner:
+ build:
+ context: .
+ dockerfile: Dockerfile.runner
+ restart: unless-stopped
+ volumes:
+ - /var/run/docker.sock:/var/run/docker.sock
+ - /opt/micromelon:/opt/micromelon
+ - runner-data:/data
+ environment:
+ GITEA_INSTANCE_URL: ${GITEA_URL}
+ GITEA_RUNNER_REGISTRATION_TOKEN: ${RUNNER_TOKEN}
+ GITEA_RUNNER_NAME: micromelon-runner
+ GITEA_RUNNER_LABELS: "self-hosted:host"
+
+volumes:
+ runner-data:
diff --git a/docker-compose.yml b/docker-compose.yml
new file mode 100644
index 0000000..4e21ab7
--- /dev/null
+++ b/docker-compose.yml
@@ -0,0 +1,10 @@
+services:
+ web:
+ image: micromelon-website:latest
+ container_name: micromelon-web
+ restart: unless-stopped
+ ports:
+ - "3000:3000"
+ environment:
+ - AIRTABLE_API_KEY=${AIRTABLE_API_KEY}
+ - AIRTABLE_BASE_ID=${AIRTABLE_BASE_ID}
diff --git a/next.config.ts b/next.config.ts
index e9ffa30..68a6c64 100644
--- a/next.config.ts
+++ b/next.config.ts
@@ -1,7 +1,7 @@
import type { NextConfig } from "next";
const nextConfig: NextConfig = {
- /* config options here */
+ output: "standalone",
};
export default nextConfig;
diff --git a/public/images/awards/world-robot-summit.png b/public/images/awards/world-robot-summit.png
new file mode 100644
index 0000000..c194bbb
Binary files /dev/null and b/public/images/awards/world-robot-summit.png differ
diff --git a/public/images/partners/aisnsw.jpg b/public/images/partners/aisnsw.jpg
new file mode 100644
index 0000000..0585fb4
Binary files /dev/null and b/public/images/partners/aisnsw.jpg differ
diff --git a/public/images/partners/makerhero.svg b/public/images/partners/makerhero.svg
new file mode 100644
index 0000000..58f482f
--- /dev/null
+++ b/public/images/partners/makerhero.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/public/images/partners/qsite.webp b/public/images/partners/qsite.webp
new file mode 100644
index 0000000..c2daf6e
Binary files /dev/null and b/public/images/partners/qsite.webp differ
diff --git a/public/images/partners/qut-robotics.jpeg b/public/images/partners/qut-robotics.jpeg
new file mode 100644
index 0000000..54e3044
Binary files /dev/null and b/public/images/partners/qut-robotics.jpeg differ
diff --git a/public/images/partners/robotics-australia-group.png b/public/images/partners/robotics-australia-group.png
new file mode 100644
index 0000000..3168376
Binary files /dev/null and b/public/images/partners/robotics-australia-group.png differ
diff --git a/public/images/partners/uq-racing.jpg b/public/images/partners/uq-racing.jpg
new file mode 100644
index 0000000..0033802
Binary files /dev/null and b/public/images/partners/uq-racing.jpg differ
diff --git a/public/images/products/code-editor-with-ipad.png b/public/images/products/code-editor-with-ipad.png
new file mode 100644
index 0000000..e37449e
Binary files /dev/null and b/public/images/products/code-editor-with-ipad.png differ
diff --git a/public/images/products/from-rover-to-software.gif b/public/images/products/from-rover-to-software.gif
new file mode 100644
index 0000000..80d4e32
Binary files /dev/null and b/public/images/products/from-rover-to-software.gif differ
diff --git a/public/images/products/junior-app.png b/public/images/products/junior-app.png
new file mode 100644
index 0000000..4eb2ffe
Binary files /dev/null and b/public/images/products/junior-app.png differ
diff --git a/public/images/products/junior-blocks-interface.png b/public/images/products/junior-blocks-interface.png
new file mode 100644
index 0000000..88ec7a8
Binary files /dev/null and b/public/images/products/junior-blocks-interface.png differ
diff --git a/public/images/products/junior-hero.png b/public/images/products/junior-hero.png
new file mode 100644
index 0000000..ac58490
Binary files /dev/null and b/public/images/products/junior-hero.png differ
diff --git a/public/images/products/junior-icon.png b/public/images/products/junior-icon.png
new file mode 100644
index 0000000..e665131
Binary files /dev/null and b/public/images/products/junior-icon.png differ
diff --git a/public/images/products/junior-rover-view.png b/public/images/products/junior-rover-view.png
new file mode 100644
index 0000000..a8594b1
Binary files /dev/null and b/public/images/products/junior-rover-view.png differ
diff --git a/public/images/products/vscode-extension-sidebar.png b/public/images/products/vscode-extension-sidebar.png
new file mode 100644
index 0000000..d2627c1
Binary files /dev/null and b/public/images/products/vscode-extension-sidebar.png differ
diff --git a/src/app/about-us/page.tsx b/src/app/about-us/page.tsx
index 1c0d828..82ded2b 100644
--- a/src/app/about-us/page.tsx
+++ b/src/app/about-us/page.tsx
@@ -63,7 +63,7 @@ export default function AboutUsPage() {
{/* Founders */}
-
+
@@ -312,11 +303,10 @@ export default function CodeEditorPage() {
- {/* Related Resources */}
-
{/* CTA */}
diff --git a/src/app/junior/page.tsx b/src/app/junior/page.tsx
index bb6b68b..7b28bbd 100644
--- a/src/app/junior/page.tsx
+++ b/src/app/junior/page.tsx
@@ -3,8 +3,6 @@ import Image from "next/image";
import { Container } from "@/components/layout/Container";
import { Button } from "@/components/ui/Button";
import { LearningPathway } from "@/components/ui/LearningPathway";
-import { RelatedResources } from "@/components/ui/RelatedResources";
-import { getAllResources } from "@/lib/resources";
export const metadata: Metadata = {
title: "Micromelon Junior",
@@ -12,12 +10,30 @@ export const metadata: Metadata = {
"A simplified coding app for young learners. Teach the basics of computational thinking with an easy-to-use interface on iPad and Android.",
};
-export default function JuniorPage() {
- const resources = getAllResources();
- const relatedResources = resources
- .filter((r) => r.categories.includes("Getting Started"))
- .slice(0, 4);
+const features = [
+ {
+ title: "Simplified Interface",
+ description:
+ "A pared-back design so students can focus on learning concepts rather than navigating menus.",
+ },
+ {
+ title: "Tablet-First",
+ description:
+ "Available on iPad and Android. Perfect for schools using tablets in the classroom.",
+ },
+ {
+ title: "Block-Based Coding",
+ description:
+ "Drag-and-drop blocks to build programs. No typing required, making it accessible for early primary students.",
+ },
+ {
+ title: "Works with the Rover",
+ description:
+ "Connect to a real Micromelon Rover and see programs come to life, the same rover students will use as they progress.",
+ },
+];
+export default function JuniorPage() {
return (
<>
{/* Hero */}
@@ -34,22 +50,19 @@ export default function JuniorPage() {
computational thinking with a friendly, easy-to-navigate
interface.
-
+
-
@@ -58,55 +71,81 @@ export default function JuniorPage() {
{/* What is Junior */}
-
+
-
+
+
+
+
+
+
+ Built for Younger Learners
+
+
+ Junior is designed for lesson plans that focus on computational
+ thinking fundamentals like sequencing, loops, and simple
+ decision-making, without the complexity of a full coding
+ environment.
+
+
+
+
+ {features.map((feature) => (
+
+
+ {feature.title}
+
+
+ {feature.description}
+
+
+ ))}
+
+
+
+
+ {/* Screenshots */}
+
+
+
- Built for Younger Learners
+ See It in Action
-
- Junior is designed for lesson plans that focus on computational
- thinking fundamentals like sequencing, loops, and simple
- decision-making, without the complexity of a full coding
- environment.
+
+ A clean block-based interface for building programs, and a live
+ Rover View showing real-time sensor data.
-
-
-
- Simplified Interface
-
-
- A pared-back design so students can focus on learning concepts
- rather than navigating menus.
-
-
-
-
- Tablet-First
-
-
- Available on iPad and Android. Perfect for schools using
- tablets in the classroom.
-
-
-
-
- Block-Based Coding
-
-
- Drag-and-drop blocks to build programs. No typing required,
- making it accessible for early primary students.
-
-
-
-
- Works with the Rover
-
-
- Connect to a real Micromelon Rover and see programs come to
- life, the same rover students will use as they progress.
-
-
+
+
+
+
+
+ Drag-and-drop blocks to build programs
+
+
+
+
+
+ Live sensor data from the connected rover
+
@@ -117,33 +156,7 @@ export default function JuniorPage() {
title="From Blocks to Python"
subtitle="Junior is the starting point. When students are ready, they move to the full Code Editor with blocks, mixed mode, and Python, all using the same Micromelon Rover."
activeStep={1}
- />
-
- {/* Available On */}
-
-
-
-
- Available On
-
-
- iPad and Android tablets. Download from the App Store or Google
- Play.
-
A dedicated Python module for controlling Micromelon Rovers and
simulated rovers from any Python environment. Perfect for senior
students ready to move beyond the Code Editor.
+ The Micromelon Python library gives students full control of
+ their rover using standard Python. Use it in VS Code, PyCharm,
+ Jupyter Notebooks, or any environment that runs Python.
+
+
+
+
+
+
+ {/* VS Code Extension */}
+
+
+
+
+
+ VS Code Extension
+
+
+ Micromelon for VS Code
+
+
+ Connect to your rover, run scripts, and view live sensor data
+ without leaving your editor. Hit F5 to deploy your code to the
+ rover instantly.
+
+
+ {[
+ { icon: "BLE", title: "One-Click Connect", desc: "Connect to any rover by ID over Bluetooth Low Energy" },
+ { icon: "▶", title: "Run with F5", desc: "Deploy and run your Python script on the rover instantly" },
+ { icon: "◉", title: "Live Sensors", desc: "Real-time dashboard for ultrasonic, colour, IR, accelerometer & gyroscope" },
+ { icon: "{ }", title: "Code Snippets", desc: "Type mm- for ready-made templates for motors, sensors, LEDs & sounds" },
+ ].map((item) => (
+
+
+ {item.icon}
+
+
{item.title}
+
{item.desc}
+
+ ))}
@@ -65,97 +774,162 @@ export default function PythonPage() {
{/* Features */}
-
-
-
-
- Code in Any Python Environment
-
-
- The Micromelon Python library gives students full control of their
- rover using standard Python. Use it in VS Code, PyCharm, Jupyter
- Notebooks, or any environment that runs Python.
-
-
-
-
- Full Rover API
-
-
- Control motors, read sensors, play sounds, and set LEDs with a
- clean, well-documented Python API.
-
-
-
-
- Works with the Simulator
-
-
- Connect to a simulated rover just as easily as a physical one.
- Test and iterate without hardware.
-
-
-
-
- Use Your Own Editor
-
-
- VS Code, PyCharm, Jupyter Notebooks, or a plain terminal.
- Students work in the tools real developers use.
-
-
-
-
- Advanced Projects
-
-
- Combine the rover with other Python libraries for computer
- vision, data analysis, machine learning, and more.
-
+ The Python library is the final step. Students who started with
+ blocks in Junior and progressed through the Code Editor can now
+ write professional Python.
+
- Write the same code for a simulated rover as you would for a real
- Micromelon Rover. Switch between blocks and text, and run your
- programs instantly in the Simulator.
-
-
- Explore the Code Editor
+
+
+
+ Program With The Micromelon Code Editor
+
+
+ Write the same code for a simulated rover as you would for a real
+ Micromelon Rover. Switch between blocks and text, and run your
+ programs instantly in the Simulator.
+
+
+ Explore the Code Editor
+
+
+
+
{/* System Requirements */}
-
+
@@ -218,11 +218,11 @@ export default function RobotSimulatorPage() {
- {/* Related Resources */}
-
{/* CTA */}
diff --git a/src/app/rover-expansion-3d-printing/page.tsx b/src/app/rover-expansion-3d-printing/page.tsx
index 65cd0fc..0331dc7 100644
--- a/src/app/rover-expansion-3d-printing/page.tsx
+++ b/src/app/rover-expansion-3d-printing/page.tsx
@@ -57,7 +57,7 @@ export default function RoverExpansion3DPrintingPage() {
{/* 3D Printing Crash Course */}
-
+
@@ -93,7 +93,7 @@ export default function RoverExpansion3DPrintingPage() {
{/* Build Guides */}
-
+
{/* CAD Models */}
-
+
-
-
- ),
+ category: "Sensors",
+ items: [
+ { name: "Ultrasonic Distance", description: "Measure distance to objects up to 2 m away" },
+ { name: "3x Colour Sensors", description: "Detect colours and line markings on the ground" },
+ { name: "2x IR Distance", description: "Short-range proximity detection on left and right" },
+ { name: "3-Axis Accelerometer", description: "Sense tilt, impacts, and orientation changes" },
+ { name: "3-Axis Gyroscope", description: "Track rotation and angular velocity" },
+ { name: "Battery Sensor", description: "Monitor voltage and current in real time" },
+ ],
},
{
- title: "Balance Challenges",
- description:
- "The accelerometer and gyroscope are how the rover senses movement. Use these sensors with maths and physics concepts to teach the rover to balance.",
- icon: (
-
- ),
+ category: "Motors",
+ items: [
+ { name: "2x Motorised Tracks", description: "Differential drive for precise movement and turning" },
+ { name: "2x Servo Connectors", description: "Plug in servo motors for arms, grippers, and more" },
+ ],
},
{
- title: "Driving Practice",
- description:
- "Design and code an algorithm that uses all of the sensors to drive a course while watching for road markings, turning signs, and other robot drivers.",
- icon: (
-
- ),
+ category: "Output",
+ items: [
+ { name: "8x RGB LEDs", description: "Programmable colour LEDs for feedback and display" },
+ { name: "Buzzer", description: "Play tones and melodies through code" },
+ ],
},
{
- title: "Sumo",
- description:
- "Use a combination of sensors to create a program to push opponents out of the arena. Raise the stakes with 3D printed attachments.",
- icon: (
-
- ),
- },
- {
- title: "Line Following",
- description:
- "Learn the basics of branching and loops by coding the rover to use its colour sensors to detect and follow the line.",
- icon: (
-
- ),
+ category: "Power & Expansion",
+ items: [
+ { name: "3000 mAh Battery", description: "Rechargeable lithium battery built in" },
+ { name: "USB-C Charging", description: "Standard USB-C port for fast, convenient recharging" },
+ { name: "6 Hour Battery Life", description: "A full day of classroom use on a single charge" },
+ { name: "2 Hour Charge Time", description: "Quick turnaround between classes" },
+ { name: "Bluetooth Connectivity", description: "Wireless connection to tablets, laptops, and desktops" },
+ { name: "Universal Header", description: "Connect Raspberry Pi, Arduino, and 3rd party electronics" },
+ { name: "3D Print Mount", description: "Clip-on expansion points for custom student designs" },
+ ],
},
];
-const teachableConcepts = [
- "Accelerometer",
- "Algorithm Design",
- "Branching",
- "Colour Sensors",
- "Functions",
- "Gyroscope",
- "IR Distance Sensor",
- "Loops",
- "Maths",
- "Ultrasonic",
- "Variables",
+function getActivities() {
+ const resources = getAllResources();
+ return resources
+ .filter((r) =>
+ r.categories.some((c) => c === "Activities" || c === "Simulator Activities")
+ )
+ .map((r) => ({
+ title: r.title.replace(/^Activity:\s*/, ""),
+ image: r.featuredImage || "/images/resources/placeholder.png",
+ href: `/resources/${r.slug}`,
+ }))
+ .sort(() => Math.random() - 0.5);
+}
+
+const classroomCards = [
+ {
+ title: "No Experience Needed",
+ description:
+ "Teachers don't need coding experience to run lessons. Drag-and-drop blocks, guided activities, and classroom controls make it easy to get started.",
+ image: "/images/products/code-editor-drag-blocks.gif",
+ href: null,
+ unoptimized: true,
+ },
+ {
+ title: "Works on Any Device",
+ description:
+ "The Micromelon Code Editor runs on Windows, macOS, and iPads. Students can use whatever devices your school already has.",
+ image: "/images/products/code-editor-devices.png",
+ href: null,
+ unoptimized: false,
+ },
+ {
+ title: "Easy to Manage",
+ description:
+ "Class sets come in a hard carry case with an included charging dock. All ten robots charge at once from a single outlet.",
+ image: "/images/products/case.png",
+ href: null,
+ unoptimized: false,
+ },
+ {
+ title: "Add Your Own Electronics",
+ description:
+ "Built-in expansion headers are compatible with Raspberry Pi, Arduino, and other 3rd party sensors and electronics.",
+ image: "/images/products/servo-programming.jpg",
+ href: null,
+ unoptimized: false,
+ },
];
-const techSpecs = [
- "Ultrasonic Distance Sensor",
- "3x Colour Sensors",
- "3 Axis Accelerometer",
- "2x IR Distance Sensors",
- "3 Axis Gyroscope",
- "2x Motorised Tracks",
- "2x Servo Motor Connectors",
- "Universal Expansion Header",
- "Battery voltage & current sensor",
- "Rechargeable Battery",
-];
+function SpecGroupDark({ group }: { group: typeof capabilities[number] }) {
+ return (
+
- {/* 3D Printing */}
-
+ {/* 3D Printed Attachments */}
+
-
-
- Use 3D Printing to go further!
+
+
+ Ready for More? Expand Your Rover
-
- Out of the box Micromelon Rovers are full of sensors and tools
- catering for all skill levels. For more advanced exercises,
- students can design and 3D print their own clip on extensions for
- the rover.
+
+ Once students are comfortable, optional 3D printed attachments open up new challenges. No printer? Buy them pre-printed.
-
-
- Expansion & 3D Printing
-
-
- Build Your Kit
-
-
-
-
-
- {/* Easy to Manage */}
-
-
-
-
-
-
-
-
- Easy to Manage
-
-
- Rover class sets come in a hard carry case with included
- charging dock. All ten robots can be charged at once from a
- single outlet.
-