Complete, working applications built with LARC components. These demos showcase real-world usage and serve as templates for building your own apps.
This repository uses git submodules to reference the core LARC components:
apps/
├── core/ # LARC core (submodule)
├── components/ # LARC components (submodule)
├── src/ # Autoload system and utilities
│ ├── pan.mjs # Component autoloader
│ └── components/ # Symlink to components/src/components
├── contact-manager/ # Contact management app
├── data-browser/ # Data visualization app
├── invoice/ # Simple invoice creator
├── invoice-studio/ # Advanced invoice studio
└── markdown-notes/ # Markdown editor with file management
# Clone with submodules
git clone --recurse-submodules git@github.com:larcjs/apps.git
# Or if already cloned
git submodule update --init --recursive
# Serve locally
python -m http.server 8000
# Visit http://localhost:8000/Invoice Creator - Professional invoice creation tool for independent contractors.
Features:
- Contenteditable invoice fields (no forms!)
- Auto-calculating line items
- Multiple invoice management
- LocalStorage persistence
- Export to JSON
- Print-optimized layout
- Auto-save
Components Used:
app/invoice/pan-invoice-header.mjsapp/invoice/pan-invoice-items.mjsapp/invoice/pan-invoice-totals.mjsdata/pan-invoice-store.mjs
Documentation: See INVOICE_README.md
Markdown Notes - Full-featured markdown editor with file management.
Features:
- Rich markdown editor with toolbar
- Live preview toggle
- File browser with OPFS storage
- Create/rename/delete files
- Persistent storage
- Light/dark mode
- Keyboard shortcuts
- Export to .md files
Components Used:
components/pan-markdown-editor.mjscomponents/pan-markdown-renderer.mjscomponents/pan-files.mjs
Documentation: See docs/MARKDOWN_SYSTEM.md
Data Browser - Browse and visualize data with tables and charts.
Features:
- Sortable, filterable data table
- Data visualization charts
- Export to CSV/JSON
- Responsive design
Components Used:
components/pan-data-table.mjscomponents/pan-chart.mjs
Contact Manager - Simple contact management application.
Features:
- Add/edit/delete contacts
- Search and filter
- Persistent storage
- Contact cards with avatars
Components Used:
ui/pan-card.mjsui/pan-modal.mjsui/user-avatar.mjs
- Study the code to learn PAN patterns
- See component integration in action
- Understand state management strategies
- Fork a demo to start your own app
- Modify to fit your use case
- Add your own components
- See complete, working examples
- Copy patterns into your projects
- Learn best practices
<!-- Toolbar -->
<div class="toolbar">
<button>Actions</button>
<pan-theme-toggle></pan-theme-toggle>
</div>
<!-- Main Content -->
<div class="main-content">
<pan-app-component></pan-app-component>
</div>
<!-- Infrastructure -->
<pan-bus></pan-bus>
<pan-theme-provider theme="auto"></pan-theme-provider>// Central store coordinates state
<pan-data-store></pan-data-store>
// Components communicate via PAN
bus.subscribe('data.loaded', (msg) => {
updateUI(msg.data);
});
bus.publish('data.save', { item: {...} });const files = document.querySelector('pan-files');
// Save
await files.writeFile('/document.md', content);
// Load
const content = await files.readFile('/document.md');
// Delete
await files.deleteFile('/document.md');<!-- Theme provider manages state -->
<pan-theme-provider theme="auto"></pan-theme-provider>
<!-- Toggle button -->
<pan-theme-toggle variant="icon"></pan-theme-toggle>
<!-- All components automatically adapt -->Pick the demo closest to your needs:
- Forms/CRUD → invoice.html or contact-manager.html
- Editor → markdown-notes.html
- Data viz → data-browser.html
- Copy the HTML file
- Replace components with your own
- Update styling and branding
- Add your business logic
Create app-specific components in app/your-app/:
export class PanYourComponent extends HTMLElement {
// Your component code
}Create a store in data/ if needed:
export class PanYourStore extends HTMLElement {
// State management code
}All demos are static HTML/JS and can be deployed anywhere:
- GitHub Pages
- Netlify
- Vercel
- Any static host
- Or run locally with
python -m http.server
No build step required! 🎉
Open any .html file in your browser:
# From project root
python -m http.server 8000
# Then visit http://localhost:8000/apps/invoice.htmlOr use the VS Code Live Server extension.
To add a new demo app:
- Create
apps/your-app.html - Create components in
app/your-app/ - Add data store in
data/if needed - Update this README
- Add to gallery.html
✅ Do:
- Use semantic HTML
- Follow PAN event patterns
- Respect theme CSS variables
- Add keyboard shortcuts
- Handle errors gracefully
- Provide user feedback
- Test light/dark modes
❌ Don't:
- Hardcode colors (use CSS variables)
- Skip error handling
- Forget mobile responsiveness
- Mix multiple apps in one file
- Ignore accessibility
For questions or issues:
- Check component documentation in respective README files
- See main PAN documentation
- Look at other demo apps for examples
- Open an issue on GitHub