From 58d426c96d1700baa51b676e6a3574a869513bf4 Mon Sep 17 00:00:00 2001 From: Circuit-Overtime Date: Mon, 18 May 2026 21:29:15 +0530 Subject: [PATCH 01/32] remove the existing site planer --- OTOD.MD | 7 ------- 1 file changed, 7 deletions(-) delete mode 100644 OTOD.MD diff --git a/OTOD.MD b/OTOD.MD deleted file mode 100644 index 78dd9c9..0000000 --- a/OTOD.MD +++ /dev/null @@ -1,7 +0,0 @@ -no i bascially want to build the website firts, it will be a fancy website minimalist design, like the look in [IMAGE1] with our logo and the branding, apply artistic framer motion no lag effects and make the color theme, and put a file called as theme.js - -dveelop the websiye in next 15 in the folder oreo.elixpo and we will have the folder essentails thete, the /upload will be a gated upload method whwre the code displayed in the badge has to bve provided in the /upload placeholder to initiate communicatin over https to the badge provided both the badge and the phne / other devicd is in the same netwoek, it will then initiate file transfer via the private local net peer to peer - -make the website look fancy and apply cool animations, show case the instyalled apps the app stoe apps, footer geader, amke it modular with multiple / dir to visit and also mark the open source github too - -this will be deployed to cloudflare pages, create a page for oreo.pages.dev using wrangler and i shall upload it to CF \ No newline at end of file From c00d38b147b5467c92255e9ffad0a7383c58e0b7 Mon Sep 17 00:00:00 2001 From: Circuit-Overtime Date: Mon, 18 May 2026 21:29:38 +0530 Subject: [PATCH 02/32] update patch --- oreoOS/config.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/oreoOS/config.py b/oreoOS/config.py index d4459b1..636ed14 100644 --- a/oreoOS/config.py +++ b/oreoOS/config.py @@ -18,7 +18,7 @@ def _load_env(): # OS version. tools/deploy.py auto-bumps the PATCH number on every push. # The literal MUST stay on its own line as `VERSION = "vN.N.N"` — the # deploy regex relies on that exact format to rewrite in place. -VERSION = "v1.4.47" +VERSION = "v1.4.48" # ISO-date stamp of the current VERSION. Updated by tools/release.py # (or by hand for hot-fix builds). Shown on the Updates page as the # "Latest stable as of …" line when no newer release is available. From cdcd3d0f08dd7d14e70774df5cb563e21f5ee1ac Mon Sep 17 00:00:00 2001 From: Circuit-Overtime Date: Mon, 18 May 2026 21:35:02 +0530 Subject: [PATCH 03/32] scalfoled the foundation of the site --- apps/wifi/main.py | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/apps/wifi/main.py b/apps/wifi/main.py index ef1ac4e..b0dafc3 100644 --- a/apps/wifi/main.py +++ b/apps/wifi/main.py @@ -547,11 +547,18 @@ def _draw_transfer(self, d): # ── URL block ── y = ROW_TOP_Y if running: - url1 = hs.url() - url2 = hs.url_fallback() + url_local = hs.url() # http://oreo.local/ + url_ip = hs.url_fallback() # http://192.168.x.y/ d.text("Open on your phone:", ROW_PAD_X, y, theme.TEXT_DIM) - d.text(url1, ROW_PAD_X, y + 14, theme.PRIMARY, scale=2) - d.text(url2, ROW_PAD_X, y + 36, theme.TEXT_DIM) + # Public web UI on Cloudflare Pages — primary call to + # action. scale=1 so the full domain fits one line; the + # earlier scale=2 was overflowing on long mDNS hostnames. + d.text("oreo.pages.dev/upload", + ROW_PAD_X, y + 14, theme.PRIMARY, scale=1) + # Local fallbacks for offline / locked-down WiFi where + # the public site can't reach us. + d.text(url_local, ROW_PAD_X, y + 28, theme.TEXT_DIM) + d.text(url_ip, ROW_PAD_X, y + 40, theme.MUTED2) else: d.text("Server offline.", ROW_PAD_X, y, theme.MUTED, scale=1) d.text("Connect WiFi to enable transfer.", From e82697cff446aa7383450fad454bca0618a1a8cc Mon Sep 17 00:00:00 2001 From: Circuit-Overtime Date: Mon, 18 May 2026 21:35:41 +0530 Subject: [PATCH 04/32] website foudation of the inital pages --- oreo.elixpo/.gitignore | 7 ++ oreo.elixpo/next.config.mjs | 20 +++++ oreo.elixpo/package.json | 30 +++++++ oreo.elixpo/postcss.config.js | 6 ++ oreo.elixpo/src/app/globals.css | 66 ++++++++++++++ oreo.elixpo/src/app/layout.tsx | 37 ++++++++ oreo.elixpo/src/components/AppCard.tsx | 61 +++++++++++++ oreo.elixpo/src/components/Footer.tsx | 104 ++++++++++++++++++++++ oreo.elixpo/src/components/Header.tsx | 92 +++++++++++++++++++ oreo.elixpo/src/components/MotionWrap.tsx | 47 ++++++++++ oreo.elixpo/src/data/apps.ts | 39 ++++++++ oreo.elixpo/tailwind.config.ts | 64 +++++++++++++ oreo.elixpo/theme.js | 63 +++++++++++++ oreo.elixpo/tsconfig.json | 24 +++++ oreo.elixpo/wrangler.toml | 12 +++ 15 files changed, 672 insertions(+) create mode 100644 oreo.elixpo/.gitignore create mode 100644 oreo.elixpo/next.config.mjs create mode 100644 oreo.elixpo/package.json create mode 100644 oreo.elixpo/postcss.config.js create mode 100644 oreo.elixpo/src/app/globals.css create mode 100644 oreo.elixpo/src/app/layout.tsx create mode 100644 oreo.elixpo/src/components/AppCard.tsx create mode 100644 oreo.elixpo/src/components/Footer.tsx create mode 100644 oreo.elixpo/src/components/Header.tsx create mode 100644 oreo.elixpo/src/components/MotionWrap.tsx create mode 100644 oreo.elixpo/src/data/apps.ts create mode 100644 oreo.elixpo/tailwind.config.ts create mode 100644 oreo.elixpo/theme.js create mode 100644 oreo.elixpo/tsconfig.json create mode 100644 oreo.elixpo/wrangler.toml diff --git a/oreo.elixpo/.gitignore b/oreo.elixpo/.gitignore new file mode 100644 index 0000000..6f44b3b --- /dev/null +++ b/oreo.elixpo/.gitignore @@ -0,0 +1,7 @@ +node_modules/ +.next/ +out/ +*.tsbuildinfo +.env.local +.env.production.local +.wrangler/ diff --git a/oreo.elixpo/next.config.mjs b/oreo.elixpo/next.config.mjs new file mode 100644 index 0000000..7c2f1d3 --- /dev/null +++ b/oreo.elixpo/next.config.mjs @@ -0,0 +1,20 @@ +/** @type {import('next').NextConfig} */ +const nextConfig = { + // Static export — Cloudflare Pages serves the resulting /out directory + // as a plain CDN-fronted site. Keeps the deployment story to two + // commands (`next build` + `wrangler pages deploy out`) and lets us + // skip the Workers runtime entirely. The cost is no server-rendered + // routes; the file-transfer page does its work entirely client-side + // against the badge's local HTTP server, so that's fine. + output: "export", + // Image optimisation requires a server runtime — disable so the + // static export contains the original asset bytes. + images: { + unoptimized: true, + }, + // Trailing slashes on every URL so Cloudflare Pages serves the + // matching `path/index.html` even without rewrite rules. + trailingSlash: true, +}; + +export default nextConfig; diff --git a/oreo.elixpo/package.json b/oreo.elixpo/package.json new file mode 100644 index 0000000..63258bc --- /dev/null +++ b/oreo.elixpo/package.json @@ -0,0 +1,30 @@ +{ + "name": "oreo-elixpo", + "version": "1.0.0", + "private": true, + "description": "The Oreo Badge — marketing site, app catalogue, and gated file-transfer launcher.", + "scripts": { + "dev": "next dev", + "build": "next build", + "start": "next start", + "lint": "next lint", + "deploy": "next build && wrangler pages deploy out --project-name=oreo" + }, + "dependencies": { + "next": "14.2.5", + "react": "18.3.1", + "react-dom": "18.3.1", + "framer-motion": "11.3.8", + "lucide-react": "0.408.0" + }, + "devDependencies": { + "typescript": "5.5.3", + "@types/node": "20.14.10", + "@types/react": "18.3.3", + "@types/react-dom": "18.3.0", + "tailwindcss": "3.4.6", + "postcss": "8.4.39", + "autoprefixer": "10.4.19", + "wrangler": "3.65.1" + } +} diff --git a/oreo.elixpo/postcss.config.js b/oreo.elixpo/postcss.config.js new file mode 100644 index 0000000..12a703d --- /dev/null +++ b/oreo.elixpo/postcss.config.js @@ -0,0 +1,6 @@ +module.exports = { + plugins: { + tailwindcss: {}, + autoprefixer: {}, + }, +}; diff --git a/oreo.elixpo/src/app/globals.css b/oreo.elixpo/src/app/globals.css new file mode 100644 index 0000000..c425477 --- /dev/null +++ b/oreo.elixpo/src/app/globals.css @@ -0,0 +1,66 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; + +/* ── Base typography + body ──────────────────────────────────────────── */ +:root { + color-scheme: dark; + --font-display: "Pixelify Sans", "JetBrains Mono", ui-sans-serif, system-ui, + sans-serif; +} + +html, body { + background: theme("colors.bg"); + color: theme("colors.text"); + font-family: theme("fontFamily.sans"); + font-feature-settings: "ss01" 1, "ss02" 1, "cv11" 1; + -webkit-font-smoothing: antialiased; + text-rendering: optimizeLegibility; +} + +/* Ambient gradient backdrop — a single fixed layer behind everything + instead of per-page backgrounds, so the page transitions feel + continuous. Subtle enough to not fight content. */ +body::before { + content: ""; + position: fixed; + inset: 0; + background: + radial-gradient(60% 50% at 25% 15%, rgba(255, 93, 104, 0.10), transparent 60%), + radial-gradient(50% 45% at 80% 90%, rgba(162, 155, 254, 0.08), transparent 60%), + radial-gradient(40% 35% at 90% 10%, rgba(61, 220, 151, 0.06), transparent 60%); + pointer-events: none; + z-index: -1; +} + +/* ── Selection ──────────────────────────────────────────────────────── */ +::selection { + background: theme("colors.primary"); + color: theme("colors.bg"); +} + +/* ── Custom utilities ───────────────────────────────────────────────── */ +@layer components { + .container-page { + @apply mx-auto w-full max-w-6xl px-6 sm:px-8; + } + .btn-primary { + @apply inline-flex items-center gap-2 rounded-md bg-primary px-5 py-2.5 + font-semibold text-bg transition-colors hover:bg-primary-dim; + } + .btn-ghost { + @apply inline-flex items-center gap-2 rounded-md border border-border + px-5 py-2.5 text-text transition-colors hover:bg-card; + } + .chip { + @apply inline-flex items-center gap-1.5 rounded-pill bg-card-sub px-2.5 py-1 + text-xs uppercase tracking-wider text-text-dim; + } + .card-surface { + @apply rounded-lg border border-border bg-card transition-colors; + } +} + +/* No-overscroll on mobile so the gradient doesn't reveal the bg colour + bleeding past the edge. */ +html { overscroll-behavior: none; } diff --git a/oreo.elixpo/src/app/layout.tsx b/oreo.elixpo/src/app/layout.tsx new file mode 100644 index 0000000..7605952 --- /dev/null +++ b/oreo.elixpo/src/app/layout.tsx @@ -0,0 +1,37 @@ +import type { Metadata } from "next"; +import "./globals.css"; +import Header from "@/components/Header"; +import Footer from "@/components/Footer"; + +export const metadata: Metadata = { + title: "Oreo — a Python OS for the Elixpo Badge", + description: + "Conference badge running OreoOS — Python-native on MicroPython. " + + "App store, OTA updates, AirDrop-style WiFi transfer, IR quests.", + metadataBase: new URL("https://oreo.pages.dev"), + openGraph: { + title: "Oreo Badge", + description: + "A Python OS for a pocket-sized open-hardware conference badge.", + url: "https://oreo.pages.dev", + siteName: "Oreo", + type: "website", + }, + themeColor: "#0F0C1C", +}; + +export default function RootLayout({ + children, +}: { + children: React.ReactNode; +}) { + return ( + + +
+
{children}
+