Skip to content

kody-w/localFirstTools

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

772 Commits
Sorry, we had to truncate this directory to 1,000 files. 219 entries were omitted from the list.
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

Local First Tools ๐Ÿ› ๏ธ

A curated collection of 100+ self-contained HTML applications following the "local-first" philosophy. Every tool works completely offline, with no external dependencies, no build process, and no tracking.

https://kody-w.github.io/localFirstTools/index.html

License

Local First Tools Gallery

โœจ Features

  • ๐Ÿ”’ Offline-First: Every application works completely offline
  • ๐ŸŽฏ Zero Dependencies: No CDN links, no npm packages, no build process
  • ๐Ÿ“ฆ Self-Contained: Each HTML file is a complete application
  • ๐ŸŽจ Beautiful Gallery: Browse tools in a modern, animated gallery interface
  • ๐ŸŒ 3D Experience: Explore tools in an immersive 3D virtual gallery
  • ๐Ÿ’พ Data Privacy: All data stays local in your browser
  • ๐Ÿ“ฅ Import/Export: Full JSON import/export for data portability
  • ๐ŸŽฎ 100+ Tools: Games, creative tools, productivity apps, and more

๐Ÿš€ Quick Start

Option 1: Use Online

Visit the live gallery: kody-w.github.io/localFirstTools

Option 2: Run Locally

# Clone the repository
git clone https://github.com/kody-w/localFirstTools.git
cd localFirstTools

# Start a local server
python3 -m http.server 8000

# Open in browser
open http://localhost:8000

Option 3: Use Individual Tools

Each HTML file can be opened directly in your browser without any server. Just download and double-click!

๐Ÿ“‚ Project Structure

localFirstTools/
โ”œโ”€โ”€ index.html                    # Main gallery launcher
โ”œโ”€โ”€ vibe_gallery_config.json      # Auto-generated app registry
โ”œโ”€โ”€ tools-manifest.json           # Simple tool listing
โ”œโ”€โ”€ [100+ HTML apps]              # Self-contained applications
โ”œโ”€โ”€ vibe_gallery_updater.py       # Gallery metadata extractor
โ”œโ”€โ”€ update-tools-manifest.py      # Manifest generator
โ””โ”€โ”€ CLAUDE.md                     # Developer guide

๐ŸŽจ Application Categories

The gallery organizes applications into 9 thematic categories:

Category Description Examples
๐ŸŽจ Visual Art Interactive visual experiences and design tools Drawing apps, SVG editors, color palettes
๐ŸŒŒ 3D & Immersive Three-dimensional and WebGL experiences 3D worlds, VR experiences, games
๐ŸŽต Audio & Music Sound synthesis and music creation Drum machines, synthesizers, audio tools
๐ŸŽฎ Games & Puzzles Interactive games and playful experiences Card games, arcade games, puzzles
๐Ÿค– Experimental AI AI-powered interfaces and demos Chatbots, AI assistants, automation
๐Ÿ› ๏ธ Creative Tools Productivity and creative utilities Text editors, todo apps, converters
๐ŸŒ€ Generative Art Algorithmic art generation systems Procedural art, fractals, patterns
โš›๏ธ Particle & Physics Physics simulations and particle systems Physics engines, particle effects
๐Ÿ“š Educational Learning resources and tutorials Interactive tutorials, demos

๐Ÿ› ๏ธ Development

Adding a New Application

  1. Create a self-contained HTML file following the structure:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Your App Name</title>
    <meta name="description" content="Brief description">
    <style>
        /* All CSS inline here */
    </style>
</head>
<body>
    <!-- Your app UI -->
    <script>
        /* All JavaScript inline here */
    </script>
</body>
</html>
  1. Save to the root directory with a descriptive name: my-awesome-tool.html

  2. Update the gallery:

python3 vibe_gallery_updater.py
  1. Refresh the gallery to see your new tool!

Key Principles

  • โœ… Self-Contained: All CSS and JavaScript must be inline
  • โœ… No External Dependencies: No CDN links, no npm packages
  • โœ… Offline-First: Must work without internet connection
  • โœ… Data Import/Export: Include JSON import/export functionality
  • โœ… Responsive Design: Works on desktop and mobile devices
  • โœ… Local Storage: Use browser localStorage for persistence

Development Commands

# Update gallery configuration (extracts metadata from all HTML files)
python3 vibe_gallery_updater.py

# Quick shell wrapper
./update-gallery.sh

# Update tools manifest
python3 update-tools-manifest.py

# Watch for changes and auto-update
python3 vibe_gallery_watcher.py

# Run once and exit
python3 vibe_gallery_watcher.py --once

# Organize files into categories
python3 vibe_gallery_organizer.py

# Preview mode (shows what would be organized)
python3 vibe_gallery_organizer.py --dry-run

๐Ÿงฑ Frame machine surfaces

The repo now includes two frame-pattern tools that treat raw JSON pulled from the public repo as globally accessible state:

  • dynamics365-frame-machine.html โ€” the Dynamics 365 proof, now living here as a portable frame machine with GitHub raw overlays from the public repo, liquid fork dimensions, import/export backups, and a lockstep twin console.
  • hacker-news-simulator.html โ€” a repaired Hacker News simulator that now runs as a frame machine over data/content/hacker-news-posts.json, with fork-aware liquid dimensions and bundle backup and reimport flows.

These pages are not just demos. They treat the raw files as the canonical medium, which means the state stays publicly available in the repo, forks can export a bundle, change it locally, and import it back without losing the business logic flow carried by the frames. That backup and reimport loop is part of the frame contract, not an afterthought.

๐ŸŽฏ Auto-Categorization

The gallery automatically categorizes applications based on code analysis:

  • Keywords Detection: Scans for technology-specific keywords (3D, canvas, audio, game, etc.)
  • Metadata Extraction: Pulls title, description from HTML tags
  • Complexity Analysis: Determines simple/intermediate/advanced based on file size and features
  • Interaction Type: Identifies as game, drawing, visual, interactive, audio, or interface

Influencing Auto-Categorization

Include relevant keywords in your HTML:

<!-- Keywords: 3d, canvas, animation, physics -->

Or use specific technologies in your code:

  • 3D/WebGL: three.js, webgl, perspective
  • Canvas: canvas, getContext
  • Audio: webaudio, audiocontext
  • Game: game, score, player, level
  • Interactive: click, drag, touch
  • Generative: random, generate, procedural

๐Ÿ—๏ธ Architecture

Local-First Philosophy

Every application in this collection adheres to these principles:

  1. Privacy by Design: No data leaves your browser
  2. Offline Functionality: Works without internet connection
  3. No External Dependencies: Self-contained and portable
  4. Data Ownership: You control your data through import/export
  5. No Build Process: Open in any browser, no compilation needed

Gallery System

The gallery uses a dual-config system:

  • vibe_gallery_config.json: Rich metadata with categories, tags, complexity
  • tools-manifest.json: Simple file listing with timestamps

Both are auto-generated by scanning HTML files in the repository.

๐Ÿ“ฑ Browser Compatibility

  • โœ… Chrome/Edge (latest 2 versions)
  • โœ… Firefox (latest 2 versions)
  • โœ… Safari (latest 2 versions)
  • โœ… Mobile browsers (iOS Safari, Chrome Mobile)

๐Ÿค Contributing

Contributions are welcome! Here's how you can help:

  1. Add New Tools: Create self-contained HTML applications
  2. Improve Existing Tools: Enhance features, fix bugs, improve UX
  3. Documentation: Improve guides, add examples, create tutorials
  4. Testing: Report bugs, test on different browsers/devices

Contribution Guidelines

  1. Fork the repository
  2. Create your feature branch (git checkout -b feature/amazing-tool)
  3. Follow the development principles (self-contained, offline-first, no dependencies)
  4. Test in multiple browsers
  5. Update the gallery (python3 vibe_gallery_updater.py)
  6. Commit your changes (git commit -m 'Add amazing tool')
  7. Push to the branch (git push origin feature/amazing-tool)
  8. Open a Pull Request

๐Ÿ“„ License

This project is licensed under the MIT License - see the LICENSE file for details.

๐ŸŒŸ Acknowledgments

  • Built with vanilla HTML, CSS, and JavaScript
  • 3D gallery powered by Three.js (only external dependency in gallery)
  • Inspired by the local-first software movement

๐Ÿ”— Links

๐Ÿ“Š Stats

Tools Count Categories No Dependencies Offline First


Made with โค๏ธ for the local-first community

About

localFirstTools

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors