You are browsing as a guest. Sign up (or log in) to start making projects!

hackyc

@hackyc

Joined August 9th, 2026

  • 34Devlogs
  • 5Projects
  • 8Ships
  • 154Votes
Ship Changes requested

What I made

I made CyberOS, a browser-native desktop simulator with movable app windows, a terminal, a simulated Linux filesystem, cybersecurity learning commands, and a Matrix-style canvas background. It is intentionally lightweight, static, and deployable as a self-contained Raspberry Pi Zero W binary.

What was challenging

The hardest part was making the interface feel like a real desktop while keeping it fully client-side. Window focus, resizing, minimizing, menus, keyboard shortcuts, terminal history, and filesystem navigation all needed to cooperate without a backend or complicated framework.

What I am proud of

I am proud that CyberOS balances a polished visual experience with a careful safety model. The terminal feels interactive, but destructive filesystem commands are blocked; nmap and dig are educational simulations; and browser network requests use only client-side GET requests.

How to test it

Go to https://cyber-os.20091105.xyz. Test dragging and resizing windows, menu actions, dock shortcuts, Calculator, Calendar, File Explorer, and terminal commands such as help, neofetch, ls, cd /etc, cat hostname, nmap, and dig.

Hint

Try the sudo rm -rf / command :P

Try project → See source code →
Open comments for this post

25m 11s logged

2026-09-08 - 1.1.3

Added

  • A self-contained Linux ARMv6 CyberOS server binary for Raspberry Pi Zero W deployment.
  • Embedded frontend assets in the server executable, allowing CyberOS to run from the binary alone without a separate static-file directory.
  • A cyberos_hackclub-project.service systemd deployment configuration for starting CyberOS at boot.

Changed

  • Raspberry Pi hosting now runs on 127.0.0.1:8010 through the embedded server binary and can be exposed by an existing reverse proxy or tunnel.
  • Deployment documentation now covers binary transfer, service installation, log inspection, restart behavior, and binary upgrades.

Fixed

  • Removed the requirement to copy index.html, styles.css, and app.js beside the server binary on the Raspberry Pi.
0
0
23
Open comments for this post

2h 10m 22s logged

2026-09-08 - 1.1.2

Added

  • A terminal response for the exact command sudo rm -rf /: YOU HAVE BEEN PWNED!.
  • A reproducible Linux ARMv6 static-server source and Raspberry Pi Zero W binary that listens on 127.0.0.1:8010 by default.
  • The cyberos-server-linux-armv6 executable: a stripped, statically linked Linux ARM EABI5 binary sized for the Raspberry Pi Zero W.
  • A self-contained build that embeds the CyberOS frontend (index.html, styles.css, and app.js) directly into the executable.
  • A cyberos_hackclub-project.service systemd unit for DietPi, with boot-time startup and Restart=always supervision.

Changed

  • Raspberry Pi deployment now uses the included static server instead of requiring Python, Flask, Node, or another runtime dependency.
  • The bundled server serves the project root on 127.0.0.1:8010 by default and rejects non-GET requests with 405 Method Not Allowed.
  • The ARMv6 binary no longer requires a local project directory; copying the executable alone now serves the CyberOS interface.

Fixed

  • Raised the menu bar stacking context above application windows so Apps, File, and Window popovers always appear in front of the active window.
0
0
12
Ship Changes requested

What did you make?
I made HYPR//F1, a Chrome Manifest V3 new-tab dashboard for Formula 1 fans. It combines race countdowns, session schedules, championship standings, YouTube commentary searches, editable shortcuts, and team wallpapers. The Hyprland-inspired glass interface keeps personal settings stored locally in the browser.

What was challenging?
The most challenging part was making live F1 information useful even when data is unavailable or outdated. I had to handle API responses, time zones, countdown calculations, offline states, and local storage safely. Keeping the customisable interface responsive without adding runtime dependencies also required careful organisation.

What are you proud of?
I am proud that the project feels complete and personal instead of being just another static webpage. Users can choose teams, adjust the visual layout, upload wallpapers, manage shortcuts, and view real race information. It also respects privacy by avoiding history and tab permissions.

What should people know so they can test your project?
Testers need Node.js 18 or newer to run npm test, npm run validate, and npm run build. Then load the generated dist folder through Chrome’s Developer Mode. Test offline behaviour, settings changes, wallpaper uploads, shortcut editing, local versus UTC times, and different screen zoom levels.

Try project → See source code →
Open comments for this post

9h 44m 12s logged

This is a very big devlog because this project has been recreated (my devlogs were tags for hacking the server or smth and it just won’t let me post on that project), and I had to make a new project, so its kinda a collection of a few devlogs.

2026-09-07 - 1.1.0

Added

  • A click target on the menu-bar clock that opens a live monthly Calendar window, highlights the current day, and shows a small daily agenda.
  • A four-function Calculator with clear, delete, percentage, decimal, and grouped-zero controls.
  • An Apps launcher in the menu bar with Terminal, File Explorer, Calculator, Calendar, Devlog, and About shortcuts.
  • Keyboard application shortcuts: Cmd+1 through Cmd+4 open Terminal, File Explorer, Calculator, and Calendar respectively.
  • A functional File menu for opening File Explorer, a new Terminal window, and Calculator.
  • A functional Window menu for minimizing, closing, maximizing/restoring, and tiling visible windows.
  • A simulated, clickable Linux filesystem rooted at /, with /root, /home, /home/yichen, /etc, /usr, /var, and /tmp paths.
  • File previews for representative simulated files, including /etc/hostname, /etc/os-release, and root tooling notes.
  • A local canvas-based cmatrix-style ASCII rain wallpaper; it is rendered in the browser and adds no external asset or server dependency.
  • Dedicated README documentation covering static hosting, included apps, terminal behavior, and the low-resource deployment profile.
  • This versioned changelog.

Changed

  • Terminal identity changed from aurora@webos to root@cyberos, with /root as the initial shell directory.
  • Terminal filesystem commands (ls, cd, and cat) now use the same simulated Linux filesystem exposed by File Explorer.
  • neofetch now displays the CyberOS access-granted profile for Yichen, including research interests, objective, and the requested curiosity.exe command lines.
  • Terminal history storage moved to the cyberos-history local-storage key to avoid mixing sessions from the earlier Aurora identity.
  • Desktop and visible product labels now consistently use CyberOS branding.
  • The desktop wallpaper changed from the original glassy color-field treatment to a dark, cybersecurity-focused matrix effect.

Fixed

  • Menu popovers now start hidden and only appear after their corresponding menu-bar item is clicked.
  • The narrow-screen terminal no longer renders the wide boot banner, preventing the desktop-sized ASCII layout from overflowing on phones.
  • Active-window actions in the Window menu now operate on the window most recently brought to the foreground.

2026-09-07 - 1.0.0

Added

  • Initial static WebOS desktop with a macOS-inspired menu bar, dock, desktop shortcuts, and draggable, resizable app windows.
  • Browser-native terminal simulator with Linux-style commands: help, ls, cd, cat, pwd, echo, date, whoami, uname, history, clear, and neofetch.
  • Simulated cybersecurity learning tools: nmap and dig return deterministic training output.
  • Browser-only curl and ping helpers that use client-side GET requests; CyberOS does not provide a backend, POST endpoint, database, or authentication flow.
  • Devlog and About windows, plus command-history persistence in local storage.
0
0
16
Open comments for this post

8h 4m 17s logged

0.3.1 - 2026-09-15 (Team Wallpaper Galleries & Background Shade Control)

Added

  • Constructor Team Galleries: Instead of a flat list with just one image per team, clicking any team card in settings now opens a dedicated gallery view for that constructor with preview artwork, image count badges, and an “Active Team” toggle.
  • Multi-Image Uploads per Team: Drag-and-drop or browse multiple images at once directly inside each team’s gallery. Uploads are automatically tagged to that team in IndexedDB, and dynamic rotation (random, sequential, slideshow) cycles through all wallpapers for the active team.
  • Default Wallpaper Deletion & Restore: You can now delete/disable default built-in livery wallpapers with the hover button if you only want your own uploads. Added a ↺ Restore Default Wallpaper button so you can bring them back whenever you want.
  • Adjustable Background Shade Slider: Added a Background Shade Strength slider (0% to 100%) in both Hyprland and Wallpaper settings tabs. You can drop it all the way to 0% to completely remove the dark/light gradient wash for raw, vivid wallpapers.

Fixed

  • Background Not Changing on Team Switch: Generic circuit-dark.svg was accidentally getting added to every team’s pool, causing team switches in random mode to often roll the generic dark grid instead of team liveries. Team pools now strictly contain that team’s wallpapers.
  • Wallpaper Click Selection: In random mode, clicking a specific wallpaper in settings would actively avoid picking the one you clicked. Added explicit wallpaper selection so clicking a card immediately displays that exact wallpaper on the dashboard.
  • Team Pill Bar Background Update: Switching teams via the Waybar top pill bar now clears stale background cache and immediately applies the new team’s wallpaper.

0.3.0 - 2026-09-14 (Bug Fixes, Light Mode & Extension Packaging)

Added

  • Racing Light Mode: Full light theme with proper CSS variable propagation across every widget, navbar, settings panel, and status elements. No more hardcoded rgba(255,255,255,...) anywhere - everything uses tokens now so it actually works.
  • Theme Quick-Toggle Button: Added ☀️/🌙 icon button to the Waybar for one-click light/dark switching without opening settings at all.
  • Extension Pack Script: New scripts/pack.mjs builds and zips dist/ into f1-fans-new-tab.zip so you can drag-drop install it in Chrome without having to load unpacked every time.

Changed

  • Live search button in the Streams widget now searches for the current or most recent Grand Prix automatically (within 12-hour lights-out window counts as current), no more hardcoded Australian GP.
  • Streams footer now shows the active GP name and “Direct YouTube search · 0 API keys” instead of the old blank placeholder text.
  • Removed the useless “Check” button from the streams session selector bar — it didn’t do anything useful anyway.
  • Settings panel emoji cleanup — reduced to a single ⚙ on the title only, everything else is text labels now.

Fixed

  • Settings not updating the UI — the big one. The onChange callback was only calling applyCssTokens() but never rerender(), so sliders and dropdowns would save to state but widgets would sit there looking exactly the same. Added rerender() to the callback, now everything actually reflects changes instantly.
  • Settings state race condition — storage reads/writes are now properly sequential so rapid slider moves don’t write stale state on top of each other.
  • Widget move arrows not working — layout move functions were broken, fixed the grid coordinate math.
  • Live track status not showing on new tab — status was only updating after manually hitting the refresh button. Now it loads from cache immediately on startup.
  • Fixed manifest permissions and updated manifest.json for proper Chrome Web Store compatibility.
0
0
7
Ship

[2026-09-15] - 1.4.3

Fixed

  • Fixed menu-bar window actions failing to reopen a closed main window or show it after switching to another desktop.

[2026-09-15] - 1.4.2

Changed

  • Updated the separate single-architecture Apple Silicon and Intel release archives to build exclusively with Xcode Command Line Tools.
  • Added startup detection and automatic migration of the recognized legacy app-managed pmset permission rule.

Fixed

  • Preserved the proven v1.3.0 sleep-button route so disabling sleep no longer depends on capturing both active and inactive power-source sections.
  • Fixed restricted-permission verification after administrator authorization and added an explanation before the macOS password prompt.
  • Prevented the main window from briefly appearing at launch when Menu Bar mode was saved.
  • Persisted the Lid-Closed Dimmer setting to the preferences file immediately and restored its boolean value at startup.

[2026-09-14] - 1.4.1

Added

  • Added separate native Apple Silicon and Intel release archive automation.
  • Added structured IOKit battery monitoring and power-source change notifications.
  • Added capability-gated lid dimmer availability and native settings controls for login and app mode.
  • Added automatic release-mode detection for notarized Developer ID archives or locally runnable development/ad-hoc archives.
  • Added persisted ownership tracking and a complete-restoration-baseline requirement for app-managed sleep settings.

Changed

  • Split power management, battery monitoring, lid monitoring, brightness, scheduling, privilege policy, and menu-bar behavior out of AppState.
  • Replaced the app-managed unrestricted pmset sudoers rule with a validated, versioned policy limited to the commands the app uses.
  • Replaced the recurring ioreg subprocess with direct IOKit lid reads, interest notifications, workspace power notifications, and conditional fallback monitoring.
  • Updated the Battery Power Failsafe to use the system-level IOKit power-provider value and re-evaluate immediately when its settings change.
  • Updated Lid-Closed Dimmer to resolve optional DisplayServices symbols at runtime and stay disabled when they are unavailable.
  • Updated native archives to verify their single architecture, sign exported bundles, and staple notarization before packaging when distribution credentials are available.

Fixed

  • Fixed partially failed sleep-disable operations by rolling settings back to their captured baseline.
  • Fixed optional private brightness symbols preventing the application from linking.
  • 3 devlogs
  • 8h
  • 13.67x multiplier
  • 114 Stardust
Try project → See source code →
Open comments for this post

1h 53m 23s logged

[2026-09-15] - 1.4.2

Changed

  • Updated the separate single-architecture Apple Silicon and Intel release archives to build exclusively with Xcode Command Line Tools.
  • Added startup detection and automatic migration of the recognized legacy app-managed pmset permission rule.

Fixed

  • Preserved the proven v1.3.0 sleep-button route so disabling sleep no longer depends on capturing both active and inactive power-source sections.
  • Fixed restricted-permission verification after administrator authorization and added an explanation before the macOS password prompt.
  • Prevented the main window from briefly appearing at launch when Menu Bar mode was saved.
  • Persisted the Lid-Closed Dimmer setting to the preferences file immediately and restored its boolean value at startup.
0
0
11
Open comments for this post

8h 10m 45s logged

2026-09-08 - v0.5.0

Summary

Converted the practice application into a deployable static browser application and added a minimal, read-only Go server for secure Raspberry Pi Zero W hosting. The browser now performs linting, SQLite execution, table viewing, and database persistence locally; the server only distributes static assets.

changed

  • Moved the deployable application into github-static/, separating it from the retained Flask development application.
  • Replaced browser calls to Flask endpoints with local JavaScript modules for linting, SQL execution, table inspection, and syntax-reference rendering.
  • Changed the static build to use relative asset paths so the generated site can be served from a custom domain root or a GitHub Pages project path.
  • Removed the Google Fonts dependency and updated the static CSP so all production application assets are locally served.
  • Changed database controls to select the safest workflow for the detected browser: Chromium-style File System Access browsers show Open, Save As, and Export, while other browsers show Import and Export.
  • Reworked DatabaseManager connection access to use an RLock and per-operation cursors, preventing shared-cursor interference between concurrent Flask requests.

Added

  • Added a local sql.js WebAssembly runtime and browser SQLite engine with quote-aware script splitting, transactions, rollback, table listing, safe table reads, byte export, and Cambridge CREATE DATABASE validated-only handling.
  • Added a browser implementation of the Cambridge 9618 SQL linter and a static syntax-reference module.
  • Added local-file persistence controls: new database, open, save as, export, and import. Chromium browsers can autosave to a user-selected file; other browsers retain explicit import/export support.
  • Added persistence state reporting for in-memory, unsaved, saving, saved, imported, and failed-save states.
  • Added Vitest coverage for browser linting, SQL execution, transactions, table access, executor behavior, persistence, and write-plus-SELECT autosave behavior.
  • Added Playwright coverage for executing SQL without API requests, updating the table viewer, exporting a database, and rendering the syntax reference without an API request.
  • Added a dependency-free Go server that embeds the built static site, serves only GET and HEAD, rejects all write methods with 405 Method Not Allowed, restricts paths to known static files, and applies response timeouts and header-size limits.
  • Added CSP, MIME-sniffing, frame, referrer, permissions, COOP, and CORP security headers to the Go server.
  • Added Cloudflare-oriented cache headers: cacheable HTML with shared-cache revalidation and one-year immutable caching for versioned assets.
  • Added docs/PI_ZERO_DEPLOY.md with Pi Zero W ARMv6 cross-compilation, unprivileged runtime, reverse-proxy, Cloudflare Cache Rule, and verification instructions.
  • Added Go server tests covering allowed methods, cache/security headers, traversal rejection, and unknown paths.

Fixed

  • Fixed static WASM tests to load the checked-in runtime asset rather than assuming a package-local node_modules layout.
  • Fixed browser autosave so a script that writes data and finishes with SELECT still persists the changed database.
  • Fixed the Open Database workflow so the selected file handle remains connected and receives later live-save writes.
  • Fixed writable file-save failure handling so an open writable stream is aborted when writing fails.
0
0
6
Open comments for this post

6h 4m 55s logged

This project is currently broken as I broke multiple things while working on the new restrictive pmset fix. Will be fixed in the next devlog.

[2026-09-14] - 1.4.1

Added

  • Added separate native Apple Silicon and Intel release archive automation.
  • Added structured IOKit battery monitoring and power-source change notifications.
  • Added capability-gated lid dimmer availability and native settings controls for login and app mode.
  • Added automatic release-mode detection for notarized Developer ID archives or locally runnable development/ad-hoc archives.
  • Added persisted ownership tracking and a complete-restoration-baseline requirement for app-managed sleep settings.

Changed

  • Split power management, battery monitoring, lid monitoring, brightness, scheduling, privilege policy, and menu-bar behavior out of AppState.
  • Replaced the app-managed unrestricted pmset sudoers rule with a validated, versioned policy limited to the commands the app uses.
  • Replaced the recurring ioreg subprocess with direct IOKit lid reads, interest notifications, workspace power notifications, and conditional fallback monitoring.
  • Updated the Battery Power Failsafe to use the system-level IOKit power-provider value and re-evaluate immediately when its settings change.
  • Updated Lid-Closed Dimmer to resolve optional DisplayServices symbols at runtime and stay disabled when they are unavailable.
  • Updated native archives to verify their single architecture, sign exported bundles, and staple notarization before packaging when distribution credentials are available.

Fixed

  • Fixed partially failed sleep-disable operations by rolling settings back to their captured baseline.
  • Fixed optional private brightness symbols preventing the application from linking.
0
0
34
Open comments for this post

8h 31m 26s logged

0.2.0 - 2026-09-14 (Hyprland UI Overhaul & Full Telemetry)

Added

  • Hyprland on Arch Design System: Complete visual rework featuring frosted glass acrylic widgets (backdrop-filter: blur(20px)), customizable tile opacity (20%-100%), dynamic team livery active glowing borders, and customizable gap/rounding.
  • Waybar Top Status Bar: Live digital clock with blinking colon, live Track Flag status indicator (🟢 Green Flag / 🟡 Safety Car / 🔴 Red Flag) with pulsing dot, quick team livery pill switcher, and search focus hotkey (/).
  • Complete Grand Prix Timetable: Full weekend schedule view for FP1, FP2, FP3, Sprint Shootout, Sprint, Qualifying, and Race with live countdown timers and local/UTC timezone formatting.
  • Championship Standings Hub: Interactive dual tabs for both Driver Standings and Constructor Standings with official team color bars, driver codes, and points tally.
  • YouTube Commentary Discovery Engine: Session selector and 1-click legal live commentary search builder with curated stream channels (P1 with Matt & Tommy, The Race, Sky Sports F1, Autosport, F1 Live).
  • Curated SVG Wallpapers for All 10 Teams: Handcrafted vector wallpapers for Red Bull, Ferrari, McLaren, Mercedes, Aston Martin, Alpine, Williams, Haas, Stake Sauber, Racing Bulls, and Carbon Grid.
  • Dynamic Wallpaper Engine: Automatic slideshow timer, random/sequential new tab rotation, and local drag-and-drop image uploads stored in IndexedDB.
  • Speed Dial Shortcuts: Translucent glass shortcut tiles with high-res Google favicon resolution and instant add/remove.
  • Web App Mode: Dual support for unpacked Chrome Extension and standalone deployment on GitHub Pages / Vercel with localStorage persistence.
  • Development Log: Created DEVLOG.md documenting the design journey and architecture decisions.

Changed

  • Migrated legacy basic cards into modular Hyprland acrylic widgets.
  • Upgraded Jolpica and OpenF1 adapters to fetch full session timetables and constructor points.
  • Upgraded settings drawer into a tabbed floating control center modal with live preview sliders.

Fixed

  • Fixed layout coordinate clamping and responsive column stacking on tablets/phones.
  • Enhanced storage fallback to work seamlessly across both Chrome extension environment and standard web browsers.
0
0
7
Ship Changes requested

What did you make?
I made a Cambridge 9618 SQL practice platform: a Flask-served browser workspace that linted exam-style SQL, executed compatible statements in local SQLite, displayed tables, and provided a syntax reference for students.

What was challenging?
The hardest part was reconciling Cambridge’s restrictive SQL expectations with SQLite’s permissive behaviour, while safely parsing multi-statement scripts, preserving quoted semicolons, rolling back failures, and explaining exceptions clearly to learners.

What are you proud of?
I’m proud that it prioritised learning rather than merely execution: the linter blocked likely exam mistakes, offered explicit override control, kept scripts transactional, and made the evolving database immediately inspectable.

What should people know to test it?
To test it, create and activate venv, install requirements.txt, run python3 app.py, then open http://127.0.0.1:8001; run venv/bin/python -m unittest discover -s tests for regression coverage and verify core workflows manually.

  • 6 devlogs
  • 37h
Try project → See source code →
Open comments for this post

1h 30m 41s logged

Local Flask Server FULLY DONE

The project is under active development for an online version accessible to the public. It will be in the next ship.

2026-08-15 - v0.4.1

Summary

Refined repository hygiene after the static migration planning work.

Changed

  • Updated root ignore rules to exclude macOS .DS_Store metadata from version control.

2026-07-22 - v0.4.0

Summary

Documented the static GitHub Pages migration strategy before implementation began.

Added

  • Added github-static/implementation_plan.md describing the browser SQLite architecture, static deployment model, client-owned database persistence, API replacement map, test plan, security considerations, and GitHub Pages deployment options.

2026-07-18 - v0.3.1

Summary

Adjusted the Flask development server documentation and runtime configuration for local network access.

changed

  • Updated the Flask server port configuration.
  • Updated README run instructions to match the locally accessible development server.
0
0
11
Ship

What did you make?

I added a Sleep Scheduler to the macOS app. Users can choose days, hours, and minutes, then force the Mac to sleep when the countdown ends. It saves the last schedule, works from the menu bar, and includes lid-closed and sleep-disabled safety options.

What was challenging?

The hardest part was connecting the scheduler to existing power-management behavior safely. The app must restore disabled sleep settings before forcing sleep. I also had to keep the menu-bar countdown current, detect lid changes, save settings, and prevent conflicting scheduler states.

What are you proud of?

I am proud that the scheduler feels integrated instead of separate. It reuses the native pressure-and-hold steppers, keeps control positions stable, restores saved values on startup, and gives useful menu-bar feedback. The safety conditions make it more practical for real MacBook use.

What should people know so they can test your project?

Download, extract and open Sleep Disabler.app, then configure the Sleep Scheduler with a short duration. Ensure the pmset permission rule is enabled first. Test menu-bar quick start, saved values after relaunch, lid-open cancellation, and the sleep-disabled condition. Avoid testing if you have unsaved work!!!

  • 1 devlog
  • 9h
  • 12.64x multiplier
  • 117 Stardust
Try project → See source code →
Open comments for this post

9h 13m 9s logged

[2026-09-07] - v1.3.0

Added- Added Sleep Scheduler, which can force the Mac to sleep after a configurable days, hours, and minutes countdown.

  • Added persistent scheduler duration settings and restored them automatically at launch.
  • Added a menu-bar quick action to start the last configured scheduler duration.
  • Added a live remaining-time row to the menu-bar menu while a scheduler is active.
  • Added an optional closed-lid condition that prevents starting the scheduler with an open lid and cancels an active scheduler when the lid opens.
  • Added an optional sleep-disabled condition that only permits scheduling while Sleep Disabler is active and cancels the scheduler when normal sleep is restored.
  • Added scheduler documentation to the README.

Changed

  • Updated forced-sleep handling to restore disabled sleep settings before issuing pmset sleepnow.
  • Rebuilt the distributable Sleep Disabler.app bundle with the scheduler changes.

Fixed

  • Enabled continuous press-and-hold tracking for the native scheduler steppers.
  • Fixed the scheduler control layout so numeric-width changes do not move the stepper arrows.
0
0
23
Ship

What did you make?
I made Kernel Kiosk, a terminal-themed Godot platformer where players judge Linux commands while navigating platform levels.

What was challenging?
Making Godot web exports work reliably through a Raspberry Pi, Cloudflare Tunnel, WebAssembly, and a lightweight Go server.

What are you proud of?
I am proud of the polished hacker-terminal visual style, original platform gameplay, random questions, and working public leaderboard.

What should people know so they can test your project?
Open the hosted website in a modern browser, use WASD or arrows to move, jump, and touch bubbles.

Try project → See source code →
Open comments for this post

10h 30m 9s logged

main game done

  • Added the Godot main scene and set up the project to run properly.
  • Made a Makefile for running, testing, exporting the web version, and building binaries.
  • Added cross-platform builds, including ARMv6 for Raspberry Pi Zero hardware.
  • Built the JSON leaderboard system with sorting, score limits, and safer file saving.

added a store test

  • Added a test to make sure the leaderboard only keeps the top 50 scores.
  • Checked that old extra scores are removed from the saved JSON file.

linux/unix setup one liner!!!

  • Made setup.sh to install missing Go, Godot, and Make dependencies.
  • Added support for common Linux package managers and Homebrew.
  • The script installs Godot web export templates, exports the game, runs tests, and builds the server.

What Was the Hardest Part in Dev?

  • The hardest part was getting the Godot web export to work reliably through the Pi and Cloudflare Tunnel.
  • Debugging the blank canvas was confusing because the browser fallback text was not the actual error.
  • The large WebAssembly game file was being cut off by the server timeout, so I increased the transfer time for slower Raspberry Pi hardware.
0
0
4
Loading more…

Followers

Loading…