DEV Community

Cover image for Orbital Insertion Successful: Space Junkies Uganda Goes Live
Ronnie Atuhaire
Ronnie Atuhaire

Posted on

Orbital Insertion Successful: Space Junkies Uganda Goes Live

DEV Weekend Challenge: Community

This is a submission for the DEV Weekend Challenge: Community

"Uganda may not have launched a rocket yet, but we've launched something just as important: interest." ๐Ÿš€

The Community

Space Junkies Uganda (SJU) was born out of deep love for space, for Uganda, and for the belief that the cosmos belongs to everyone, including us.

I'm Ronnie Atuhaire, and I've been procrastinating on building our web presence since we started. But this challenge? This was the push I needed.

The Origin Story:

Last year, I was approached to serve as a judge for the NASA Space Apps Challenge in Kampala. During that event, I witnessed something powerful: students weren't just interested in space, they were passionate about it. Their eyes lit up when talking about black holes, Mars missions, and Uganda's own satellite, PearlAfricaSat-1 (launched in 2022!).

Around the same time, I became the temporary National Coordinator for World Space Week in Uganda. If you're into space, you know October is the month. So we went all in.

Uganda Space Week 2025 (October 8-10) was our first national celebration of space and astronomy, held at Makerere University. Over three days:

  • ๐ŸŽฏ 55+ attendees (students, engineers, dreamers)
  • ๐ŸŒ 2 virtual sessions + 1 physical meetup
  • ๐ŸŽฌ Space movie marathon (Interstellar, Gravity, Passengers)
  • ๐Ÿ”ญ First telescope session (I pointed it the wrong way at first, but hey, we still made contact with the stars ๐Ÿ˜‚)
  • ๐Ÿš€ DIY rocket demos
  • ๐ŸŽฒ Space Bingo Networking
  • ๐Ÿง  Topics: Quantum Cosmology, Area 51, Cryogenics, Black Holes, Living in Space

More info ๐Ÿ‘‡

#ugandaastronomicalsociety #worldspaceweek #ieee #nasaspaceapps #spacejunkiesug | Ronnie Linslay Atuhaire

Uganda Space Week: What you Missed ๐Ÿš€๐ŸŒŒ A few days ago, we were out of this world; literally. We kicked off the week with the NASA Space Apps Challenge, where I had the honor of serving as a local judge (yes, I finally got to say โ€œyour idea is going to space!โ€ ๐Ÿ˜„). Then came Uganda Space Week (8thโ€“10th October); our very first national celebration of space and astronomy, held at Makerere University. Over three days, we hosted two virtual sessions and a physical meetup that drew over 55 attendees; from curious students to die-hard space fans. We explored everything from Quantum Cosmology to Area 51 conspiracies, from Cryogenics, Black Holes to ๐—Ÿ๐—ถ๐˜ƒ๐—ถ๐—ป๐—ด ๐—ถ๐—ป ๐—ฆ๐—ฝ๐—ฎ๐—ฐ๐—ฒ, featuring movies like Interstellar, Gravity, and Passengers. We also had some fun; Space Bingo Networking, DIY Rocket demos, and yes, I operated a telescope for the first time (spoiler: I pointed it the wrong way at first; but hey, we still made contact with the stars ๐Ÿ˜‚). During our stargazing session, I realized, this wasnโ€™t just an event; it was a connection between imagination and science, between curiosity and community. As an IEEE Chair and space enthusiast, organizing this wasnโ€™t just a responsibility, it was pure passion. Uganda may not have launched a rocket yet, but weโ€™ve launched something just as important; interest. ๐˜‹๐˜ช๐˜ฅ ๐˜บ๐˜ฐ๐˜ถ ๐˜ฌ๐˜ฏ๐˜ฐ๐˜ธ ๐˜œ๐˜จ๐˜ข๐˜ฏ๐˜ฅ๐˜ข ๐˜ข๐˜ญ๐˜ณ๐˜ฆ๐˜ข๐˜ฅ๐˜บ ๐˜ฉ๐˜ข๐˜ด ๐˜—๐˜ฆ๐˜ข๐˜ณ๐˜ญ๐˜ˆ๐˜ง๐˜ณ๐˜ช๐˜ค๐˜ข๐˜š๐˜ข๐˜ต-1, ๐˜ฐ๐˜ถ๐˜ณ ๐˜ง๐˜ช๐˜ณ๐˜ด๐˜ต ๐˜ด๐˜ข๐˜ต๐˜ฆ๐˜ญ๐˜ญ๐˜ช๐˜ต๐˜ฆ, ๐˜ญ๐˜ข๐˜ถ๐˜ฏ๐˜ค๐˜ฉ๐˜ฆ๐˜ฅ ๐˜ช๐˜ฏ 2022? ๐ŸŒโœจ Oh, and a fun fact; a NASA astronautโ€™s suit costs about $12 million (around UGX 46 billion). ๐˜ ๐˜ฑ๐˜ณ๐˜ฐ๐˜ฎ๐˜ช๐˜ด๐˜ฆ ๐˜ฐ๐˜ถ๐˜ณ โ€œ๐˜š๐˜ฑ๐˜ข๐˜ค๐˜ฆ ๐˜‘๐˜ถ๐˜ฏ๐˜ฌ๐˜ช๐˜ฆ๐˜ด ๐˜œ๐˜จ๐˜ข๐˜ฏ๐˜ฅ๐˜ขโ€ ๐˜›-๐˜ด๐˜ฉ๐˜ช๐˜ณ๐˜ต๐˜ด ๐˜ธ๐˜ช๐˜ญ๐˜ญ ๐˜ฃ๐˜ฆ ๐˜ธ๐˜ข๐˜บ ๐˜ค๐˜ฉ๐˜ฆ๐˜ข๐˜ฑ๐˜ฆ๐˜ณ ๐Ÿ˜… A huge thank you to all IEEE core members, our amazing partners, and every space enthusiast who made this journey possible. You are the real stars ๐ŸŒ  If youโ€™re passionate about space and want to join our growing community; Space Junkies Uganda, or grab some cool space merch, reach out! Join us Now: https://lnkd.in/d2ykg7Gj Hereโ€™s to making the next frontier of discovery start right here in Uganda ๐Ÿ‡บ๐Ÿ‡ฌ๐Ÿš€ Thanks to Zoora Harrison, Obwengye Cosmus, Aerobuddies, GDG on Campus - Makerere University, Dr Byaruhanga Christopher , Anthony Ijoot, AHABWE CLARISSA PETITE, Ninsiima Patricia Banura, Angel Uwera, Ritah Ndibalekera, Iradukunda Jemimah, Shatrah Ddamulira, Asiimwe Martha Serena, #UgandaAstronomicalSociety IEEE Makerere University Student Branch, Ayebazibwe Brinton, Innocent Oluka et al who made this experience amazing ๐Ÿš€๐Ÿ”ฅ๐Ÿ˜ #WorldSpaceWeek #IEEE #NASAspaceapps #SpaceJunkiesUG

favicon linkedin.com

During our stargazing session at Kololo Hill, I realized: this wasn't just an event. It was a connection between imagination and science, between curiosity and community.

Why Uganda?

We sit on the equator (0.3136ยฐN, 32.5811ยฐE) - one of the best places on Earth for astronomical observations. We have PearlAfricaSat-1 orbiting above us. We have passionate students, amateur astronomers, and engineers who dream big.

What we didn't have was a digital home. A place to coordinate stargazing nights, share telescope observations, organize dark sky expeditions to Lake Mburo, and prove that African space enthusiasts are already here, already building.

Space Junkies Uganda is now 135+ members strong, and this platform is our mission control.

What I Built

A full-stack community platform featuring:

For Members:

  • ๐ŸŽฎ Asteroid Hunter Game - Defend Kampala from asteroids! Browser-based arcade game with health system, HUD metrics, and high scores. (Because if we're going to space, we need to practice defending Earth first.)
  • ๐Ÿ–ผ๏ธ Dynamic Gallery - Upload and view photos from Uganda Space Week 2025 and community events with a smooth lightbox slider
  • ๐Ÿ“… Interactive Events Calendar - Track stargazing nights, telescope workshops, and dark sky expeditions
  • ๐Ÿค– Cosmos AI Chatbot - Gemini-powered assistant with Uganda-specific space knowledge (knows about PearlAfricaSat-1!)
  • ๐ŸŽฌ Space Movie Library - Curated collection of space documentaries and films
  • ๐Ÿ‘ฅ Crew Roster - Meet the community members with astronaut avatars
  • ๐ŸŒŒ Skywatch - Real-time ISS tracking and celestial object visibility

For Admins:

  • ๐Ÿ“ธ Gallery Manager - Upload images that automatically replace placeholders on the main site
  • ๐Ÿ‘ฅ Member Request System - Review and approve new members (1,000 game points required, gotta earn your spot!)
  • ๐Ÿ“… Event Creator - Schedule and manage community events
  • ๐Ÿ’พ Persistent Storage - All data saved to JSON files, survives server restarts

Try it: https://spacejunkies-production.up.railway.app/

Design Philosophy:
Cyberpunk-meets-cosmos aesthetic with neon orange (#FF4500), cyan (#00FFD1), and deep space blacks. Terminal-style fonts (Orbitron, Share Tech Mono), scanline overlays, aurora effects, and floating particles create an immersive "space command center" vibe. Think Blade Runner meets the ISS.

Demo

๐Ÿš€ Live Features:

  • Navigate between pages with smooth transitions
  • Play the Asteroid Hunter game (โ† โ†’ to move, SPACE to fire)
  • Click gallery images to open the lightbox slider
  • Chat with Cosmos AI about Uganda's space potential
  • Browse the interactive events calendar
  • Upload images via admin panel at /admin.html

Key Interactions:

  1. Gallery uploads replace placeholders one-by-one in real-time
  2. Blog posts show "Under Development" popup (auto-fades after 5s)
  3. Game HUD displays health, score, kills, accuracy, FPS
  4. Lightbox supports keyboard navigation (โ† โ†’ arrows, Esc to close)
  5. Events calendar highlights event days with orange glow

Code

Here is the GitHub Repo: https://github.com/Ronlin1/space_junkies

Architecture:

space_junkies/
โ”œโ”€โ”€ server.js              # Express server + Gemini AI proxy
โ”œโ”€โ”€ public/
โ”‚   โ”œโ”€โ”€ index.html         # Single-page app (all pages in one file)
โ”‚   โ”œโ”€โ”€ admin.html         # Admin panel
โ”‚   โ”œโ”€โ”€ favicon.jpg        # Site icon
โ”‚   โ””โ”€โ”€ uploads/           # User-uploaded gallery images
โ”œโ”€โ”€ gallery-data.json      # Persistent gallery storage
โ”œโ”€โ”€ members-data.json      # Member requests storage
โ”œโ”€โ”€ events-data.json       # Events storage
โ”œโ”€โ”€ .env                   # GEMINI_API_KEY
โ””โ”€โ”€ package.json           # Dependencies
Enter fullscreen mode Exit fullscreen mode

Tech Stack:

  • Backend: Node.js + Express
  • AI: Google Gemini 3.1 Pro Preview via @google/genai SDK
  • File Uploads: Multer (10MB limit, auto-creates /uploads/)
  • Storage: JSON files (no database needed for MVP)
  • Frontend: Vanilla JavaScript (no frameworks!)
  • Styling: Pure CSS with custom animations

Key Features Implementation:

  1. Gallery System:
// Server: Upload endpoint
app.post('/api/admin/gallery/upload', upload.array('images', 10), (req, res) => {
  const uploadedImages = req.files.map(file => ({
    id: Date.now() + '-' + Math.random().toString(36).substring(2, 11),
    url: `/uploads/${file.filename}`,
    caption: req.body.caption || '',
    uploadedAt: new Date().toISOString()
  }));
  galleryImages.push(...uploadedImages);
  saveData(GALLERY_FILE, galleryImages);
  res.json({ success: true, images: uploadedImages });
});

// Client: Load and display
async function loadGalleryImages(){
  const res = await fetch('/api/gallery');
  const data = await res.json();
  data.images.forEach((img, index) => {
    placeholders[index].innerHTML = `
      <img src="${img.url}" alt="${img.caption}">
      <div class="gal-overlay">
        <div class="gal-label">${img.caption}</div>
      </div>
    `;
    placeholders[index].onclick = () => openLightbox(index);
  });
}
Enter fullscreen mode Exit fullscreen mode
  1. Lightbox Slider:
function openLightbox(index){
  currentLightboxIndex = index;
  updateLightboxImage();
  document.getElementById('lightbox').classList.add('active');
  document.body.style.overflow = 'hidden';
}

function changeLightboxImage(direction){
  currentLightboxIndex += direction;
  if(currentLightboxIndex < 0) currentLightboxIndex = galleryImagesData.length - 1;
  if(currentLightboxIndex >= galleryImagesData.length) currentLightboxIndex = 0;
  updateLightboxImage();
}

// Keyboard navigation
document.addEventListener('keydown', e => {
  if(!document.getElementById('lightbox').classList.contains('active')) return;
  if(e.key === 'Escape') closeLightbox();
  if(e.key === 'ArrowLeft') changeLightboxImage(-1);
  if(e.key === 'ArrowRight') changeLightboxImage(1);
});
Enter fullscreen mode Exit fullscreen mode
  1. Gemini AI Integration:
const { GoogleGenAI } = require('@google/genai');

app.post('/api/chat', async (req, res) => {
  const ai = new GoogleGenAI({ apiKey: process.env.GEMINI_API_KEY });
  const response = await ai.models.generateContent({
    model: "gemini-3.1-pro-preview",
    contents: `${SYSTEM_PROMPT}\n\nUser: ${req.body.message}`
  });
  res.json({ reply: response.text });
});
Enter fullscreen mode Exit fullscreen mode
  1. Asteroid Game:
  2. Canvas-based rendering with requestAnimationFrame
  3. Collision detection using distance formula
  4. Health system (30 HP, -1 per asteroid that passes)
  5. Random collision mechanic (10% chance when near player)
  6. HUD with real-time metrics (health bar, score, accuracy, FPS)

Screenshots

Home Page

Gallery

Asteroid Game

Sky Watch

How I Built It

The Journey:

I started ideating with Claude Code Opus, exploring the concept of a space community platform for Uganda. The vision was clear: create something that felt like a NASA mission control center but accessible to everyone.

Moved to Manus to prototype the UI/UX, experimenting with the cyberpunk aesthetic-neon colors, terminal fonts, scanline effects. The design language emerged: "What if Blade Runner met the ISS?"

Finally settled with Kiro and Copilot CLI for the heavy lifting. Kiro's autonomous coding capabilities were perfect for scaffolding the entire single-page app structure, implementing the game logic, and building the admin panel. Copilot CLI accelerated the API integrations and helped debug the trickier parts (like fixing the duplicate id="events" issue that broke navigation).

Development Highlights:

  1. Single-Page Architecture - All pages in one HTML file, JavaScript handles routing. Keeps deployment simple and load times instant.

  2. No Database - JSON files for persistence. For a community of 135 members, this is perfect. Simple, version-controllable, no setup required.

  3. Gemini Integration - Switched from fetch-based API to the official @google/genai SDK. Much cleaner error handling and automatic retries.

  4. Gallery Upload Flow - The trickiest part was ensuring uploads persist AND display on the main site. Solution: Server saves to JSON + filesystem, client fetches on page load and replaces placeholders sequentially.

  5. Lightbox Slider - Built from scratch with CSS animations and keyboard support. No libraries needed. Smooth zoom-in effect using cubic-bezier(.34,1.56,.64,1) for that satisfying bounce.

  6. Game Development - Canvas API for rendering, collision detection math, health system, HUD overlay. The exit button was crucial; players needed an escape hatch without losing progress.

  7. Events Page Fix - Duplicate IDs (id="events" on both home section and events page) broke navigation. Changed home section to id="home-events", added missing CSS for calendar and event cards.

  8. Favicon - Simple but important. Added <link rel="icon" type="image/jpeg" href="/favicon.jpg"> to complete the professional look.

Challenges Overcome:

  • Port conflicts - Multiple node processes blocking port 3000. Solution: taskkill /F /IM node.exe before starting.
  • Catch-all route placement - Had app.get('*', ...) BEFORE API endpoints, intercepting all requests. Moved to end of file.
  • Multer directory creation - Ensured uploads/ folder auto-creates with fs.mkdirSync(uploadDir, { recursive: true }).
  • Lightbox image loading - Stored gallery data globally so lightbox can access all images, not just visible ones.

Technologies:

  • Node.js 24.13.1
  • Express 4.21.2
  • @google/genai 1.43.0
  • Multer 1.4.5-lts.2
  • Vanilla JavaScript (ES6+)
  • CSS3 (Grid, Flexbox, Animations)
  • HTML5 Canvas (for game)

Deployment Ready:

  • Environment variables via .env
  • Persistent storage with JSON files
  • Static file serving via Express
  • Admin panel at /admin.html
  • Health check endpoint at /health

What's Next:

  • Authentication for admin panel
  • Database migration (MongoDB/PostgreSQL)
  • Image optimization (resize, compress)
  • Member join form on main site
  • Full blog post system (currently shows "Under Development" popup)
  • WhatsApp group integration
  • Email notifications for approved members
  • Space Junkies Uganda merch store (those T-shirts I promised!)

The Real Mission:

This platform isn't just about code. It's about proving that space exploration starts with curiosity, not budgets. It's about showing that a kid in Kampala can look up at the same stars as a kid in Cape Canaveral and dream just as big.

During Uganda Space Week, I operated a telescope for the first time. I pointed it the wrong way initially, but when we finally locked onto Jupiter, seeing those Galilean moons with my own eyes, that moment changed everything. That's what this platform is for: creating those moments for others.

We may not have $12 million spacesuits, but we have something better: a community that believes the next frontier of discovery starts right here in Uganda. ๐Ÿ‡บ๐Ÿ‡ฌ

Built with โค๏ธ for Space Junkies Uganda
Founded by Ronnie Atuhaire โ€ข January 2025
We're already gone. ๐Ÿš€


Special thanks to all IEEE core members, our amazing partners, and every space enthusiast who made Uganda Space Week possible. You are the real stars. ๐ŸŒ 

Top comments (0)