Category: projects

  • I Finally Built the CSS Framework I Wanted

    I Finally Built the CSS Framework I Wanted

    I’ve been using Pico.css for years on a lot of projects. Liveframe.app is even built with it. But I’ve had to hack on it quite a bit to get adjustable per-user theming, and it ends up being kind of heavy when you include all the colors. I wanted something a little more dynamic, and I’ve finally built it.

    It’s called @sparkstone/css, and it’s built for people like me: folks who want semantic HTML, zero bloat, and a color system that actually makes sense when you start tweaking things.

    This isn’t meant to compete with the big players. It’s not Tailwind. It’s not Bootstrap. It’s what I needed, and maybe you do too.

    Why I Love Pico.css (And What I Needed More Of)

    I’ve used Pico on a dozen projects. I love the simplicity of it, and how you can just start building things and rarely even need to reach for classes to adjust stuff. Honestly, I tried just making a fork of it to start with, Pico has almost everything I want. But over time, I kept running into the same issues:

    • Wanting to use a specific color palette for special cases
    • Wanting to be able to let the user choose their own theming
    • Wishing I could just swap a base color and have everything update beautifully
    • Needing a few more classes… but not that many

    So after I realized that hacking on Pico was going to be harder than starting from a new foundation, I started designing.


    Enter @sparkstone/css

    This project is heavily inspired by Pico, but rebuilt from scratch around oklch(). If you’ve ever struggled to tune your colors across light and dark mode, or wanted a theme system that actually reflects your palette’s structure—you’ll get why this matters. After I got the color system working, I built a page and put it side by side with Pico to get it close—like I said, I still love Pico.

    Here’s how it works:

    /* these are the defaults */
    :root {
      --color: rebeccapurple;
      --primary-color: blue;
      --accent-color: oklch(from var(--color) l c calc(h + 180));
      --error-color: maroon;
    }

    That’s it. The rest cascades from there. Text colors, surface backgrounds, borders, shadows. All tuned based on perceptual lightness and chroma. You don’t need to invent a palette. You just pick a color, and everything adjusts accordingly.


    What You Get

    • ✨ Light/dark mode that works by default (system-aware, but overrideable)
    • ✨ Minimal classes (.card, .secondary, .ghost, etc.) when you need them (largely Pico-compatible)
    • ✨ Fully native HTML elements styled with care: forms, dialogs, buttons, etc.
    • ✨ A Sass layer with functions for color derivation (but you don’t need it)

    There’s no runtime. No JS required for the styles. Just smart CSS.


    Try It Live

    I put together a docs site using the framework itself:

    🧪 sparkstonepdx.github.io/css/docs

    Everything is copyable and live-styled with your chosen theme.


    Install It

    pnpm add @sparkstone/css

    Then import it however you like:

    // scss (for full control)
    import '@sparkstone/css/src/theme.scss';
    
    // or plain css
    import '@sparkstone/css/theme.css';

    I Made This For Me (But It’s for all of us)

    I’ve spent years building local-first, minimal, durable tools, after outgrowing a decade of chasing the new shiny. Always reaching for libraries that almost worked the way I wanted. This one finally does.

    If you’re like me, and you want your CSS to feel like it’s helping, and not just there, I think you might like it too.

    I’d love to know what you make with it.

    — Adam
    Founder @ Sparkstone

  • North Tabor Yard Sale Map

    North Tabor Yard Sale Map

    How we mapped 32 sales, drew over 3 thousand visitors, and helped a community plant sale sell out before noon

    In Spring 2025, my wife and I organized North Tabor’s first-ever neighborhood-wide yard sale. As co-chair of the neighborhood association, I wanted to make it easy for residents to participate and for visitors to explore without friction. Without apps or accounts, just a smooth experience.

    I built a real-time interactive map, integrated directly into the neighborhood website. Residents submitted their sale details through a Google Form, which updated a connected Google Sheet. A frontend built with Leaflet.js used the Google Sheets API to display the data on a live, zoomable map using OpenStreetMap tiles.

    A folding sign that has an owl on it and it says give a hoot to vintage and resell.
    Give a Hoot! The Vintage & Resale sign in front of How Convenient

    On the day of the sale, the response was overwhelming: more than 3,000 people used the map in a single day. Many participants sold out of items by early afternoon, some even before noon.

    While preparing the map, we noticed signs for the Rainbow Garden Plant Sale, an independent event happening the same day. Without formally reaching out, we added their location to the map. They later told us they had a line around the block and sold out of plants within an hour. In hindsight, we probably should have asked permission, but we were happy to help spotlight another local effort.

    In all, 32 homes took part. We distributed over 50 flyers around the neighborhood ahead of the event. The day before, we personally visited each seller to deliver a thank-you note, a QR code sign linking to the live map, and a few basic supplies to help them get set up. These small details helped unify the experience and showed that the event was both coordinated and cared for.

    The project was also mentioned in the Southeast Examiner, which brought broader visibility to the neighborhood and inspired ideas for future events.

    With the event behind us, one clear lesson emerged: we need to better communicate how participants can remove or update their listing in case of emergencies or last-minute cancellations. A few sellers had unexpected conflicts, and clearer instructions would have made it easier to keep the map accurate and avoid visitor confusion.

    This wasn’t about flashy tech. It was about thoughtful coordination and the right tool at the right moment. A live map, a few hundred lines of code, and some walking shoes made a big difference.

    Images shared to the Tabor Neighbor Yard sale Liveframe Event

  • Solid Forms

    Solid Forms

    Simple, Shareable Forms Built for Real People

    Sometimes you just need to ask a question and get clear answers — without bloated dashboards, account juggling, or privacy compromises. That’s why we built Solid Forms.

    Whether you’re collecting signups, gathering feedback, or running a workshop, Solid Forms helps you create clean, reliable forms in minutes.

    The Problem: Complex Tools for Simple Tasks

    Most form builders pack in features you don’t need, inject trackers by default, or create a maze of permissions and settings just to get started. If you’re looking for something straightforward, that can feel like overkill.

    The Solution: Solid Forms

    Solid Forms focuses on doing the basics well. You create an account, build your form with a simple, dark-mode editor, and share it using a unique link.

    Add text fields, checkboxes, dropdowns, number inputs, and rich text sections. Whatever you need to get clear responses. When people fill it out, their answers appear instantly in a clean, sortable table you can export at any time.

    There’s no publish step, no complex visibility settings. Just build, share the link, and you’re good to go.

    Who It’s For

    • Builders and small teams who need feedback fast
    • Teachers and coaches gathering input or reflections
    • Workshop hosts managing signups and RSVPs
    • Anyone tired of bloated form tools and overcomplicated platforms

    Privacy First

    Respondents don’t need accounts to reply. Solid Forms doesn’t track them, inject analytics, or set cookies. Responses are stored securely and stay private.

    Try It Now

    Get started at solidforms.app. It’s fast, focused, and designed to respect your time and your audience.

    Have questions or want help setting up your first form? We’re happy to walk you through it.

  • Liveframe

    Liveframe

    Real-Time Engagement That Brings the Room to Life

    When you’re in front of a crowd — whether it’s a classroom, a conference, or a casual meetup — you can feel when the energy is right. You can also tell when it’s drifting. That’s what led to the creation of Liveframe: a tool that helps presenters and organizers stay connected with their audience through real-time participation.

    The Challenge: Passive Audiences

    Many events rely on outdated or clunky engagement tools. App installs, logins, and complex setups slow things down and limit who can join in. The result is a missed opportunity to tap into the energy already present in the room.

    The Response: Liveframe

    Liveframe opens the door to instant interaction. Audience members scan a QR code and start contributing right away.

    They can post messages or photos to a live message wall, giving everyone a voice and turning the screen into a reflection of the crowd. When structure is needed, facilitators can switch into a controlled mode to guide the flow. Polls with timed deadlines keep the audience involved and provide live feedback.

    At one local community event, the tool transformed a 20-minute break into a burst of shared jokes, spontaneous photos, and crowd chatter. When the next speaker stepped up, the audience was already re-engaged and ready to go.

    Who It’s For

    • Event organizers looking for authentic interaction
    • Teachers and workshop leaders who want live participation
    • Meetup hosts hoping to energize the room
    • Conference facilitators managing Q&A and polling

    Why It Works

    Liveframe runs smoothly in any setting. There’s nothing to install, and participants don’t need accounts. It’s designed to be quick, lightweight, and easy to use on the spot.

    Try It Out

    Liveframe is live and free at liveframe.app. You can launch a session right away and see how it works in your space.

    If you’d like help setting it up or want a quick walkthrough, we’re happy to show you around. Just reach out.

  • Arcanetable

    Arcanetable

    The virtual table for paper Magic players who miss the real thing.

    ArcaneTable is a browser-based 3D sandbox for building decks, playtesting ideas, and jamming games — just like you used to around a kitchen table. No accounts. No installs. Just your deck, a friend, and the virtual table.


    Built for the Brew

    • Designed for Playtesting: Run games, test openings, goldfish lines, and swap decks in seconds. It’s everything you need to sharpen your strategy — minus the shuffling.
    • Supports Real Deck Lists: Paste a deck list in any major format — EDH, Modern, Cube, you name it — and ArcaneTable pulls card data directly from Scryfall. No setup required.
    • Real-Time Tabletop Feel: Cards move, stack, rotate, and flip just like they would in person. Built in WebGL with smooth, intuitive controls.
    • Peer-to-Peer Multiplayer: Send a link, and a friend can join instantly. No servers, no accounts — just P2P magic through WebRTC.

    “ArcaneTable was made for those of us who miss the late-night brew sessions — building decks with friends, testing janky combos, and chasing that perfect curve.”
    — The Sparkstone Team

    Play now View source Join the Discord

  • Katachi

    Katachi

    Fast-paced. High-stakes. Last stack standing.

    Katachi is a real-time, browser-based puzzle battle where precision, speed, and survival instincts collide. Inspired by the classics, built for modern competition.


    What It Is

    • Real-Time Puzzle Royale: Katachi drops you into an active arena with other players. Clear lines to stay alive, send pressure, and outlast the chaos.
    • Classic Mechanics, Modern Flow: Familiar falling-block gameplay with clean controls and smooth browser performance — no downloads, no friction.
    • Competitive, Not Random: No gimmicks. No pay-to-win. Just skill, reflexes, and the rush of outlasting the field.
    • Instant-Play in Browser: Jump into a match in seconds at katachi.pro. No accounts or installs needed.

    “Katachi is what we wanted as kids — a Tetris-style game that’s alive, intense, and truly multiplayer.”
    — The Sparkstone Team

    Play now

  • Tasks

    Tasks

    Tasks is a local-first, collaborative notes and tasks app built for reliability, offline resilience, and open collaboration.

    Designed for users who demand full control over their data, Tasks combines modern real-time collaboration with an offline-first architecture, packaged into a lightweight Progressive Web App (PWA).

    Features

    • Local-First Storage: Data is cached with IndexedDB and service workers, ensuring Tasks is fully functional offline.
    • Real-Time Collaboration: Peer-to-peer syncing with Yjs and WebRTC allows real-time collaborative editing without relying on centralized servers.
    • Offline Access & Sync: Syncs changes efficiently between devices using Pocketbase subscriptions, with plans for ActivityPub integration.
    • Open Source: Licensed under AGPL-3.0, Tasks is designed to remain free, transparent, and forkable.
    • Progressive Web App: Installable on desktop and mobile. No app stores, no lock-in.
    • Flexible Content: Notes and tasks are stored as blocks with rich text editing, embedded files, and quick action templates.
    • Dynamic Css theme

    Architecture Overview

    • Frontend: Vanilla TypeScript + Web Components
    • Collaboration Layer: Yjs (CRDT-based) + WebRTC + IndexedDB persistence
    • Optional Backend: Pocketbase for event subscriptions and multi-device presence
    • Deployment: Optimized for edge hosting (Vercel, Cloudflare)

    Project Links

    Live Demo → tasks-eight-dun.vercel.appSource

    Code → github.com/odama626/tasks

  • Blathadex

    Blathadex

    A lovingly crafted field guide for catching critters in Animal Crossing: New Horizons.

    Built as a quarantine passion project, Blathadex is our way of giving back to the island life that gave us comfort and joy during the pandemic.


    What It Is

    • Track What You’ve Caught: Mark bugs, fish, and sea creatures as caught. Blathadex keeps your Critterpedia progress organized and up to date.
    • Know What’s Available: Each entry shows detailed availability by month, time, and location — so you know exactly what to hunt for and when.
    • Built for Completionists: Blathadex was designed to make full completion fun and frictionless, whether you’re playing casually or chasing 100%.
    • No Logins, No Installs: Blathadex is fast, free, and runs entirely in your browser. Your progress is saved locally — no accounts or tracking.

    “We made Blathadex because we loved the game — and we wanted to build something useful, cozy, and fun for others who felt the same.”
    — The Sparkstone Team

    Visit the guide View source