Skip to content

Navigation Menu

Sign in
Sign up

Repository files navigation

πŸ“š Shelf

A beautifully designed personal collection manager for the things you love.

Track films, books, music, travel destinations, recipes β€” anything worth remembering. Built with React, TypeScript, and Tailwind CSS.

React TypeScript Vite Tailwind CSS License


What is Shelf?

Shelf is a personal interests board β€” a flexible, browser-based app that lets you create custom collections and fill them with anything you care about. Think of it as a private Notion-style tracker with a focus on visual, card-based browsing.

No accounts. No servers. Your data lives in your browser's local storage and stays yours.


Features

Collections

  • Create unlimited collections with a custom name, icon, and color theme
  • Define your own field schema per collection β€” choose from 11 field types
  • Each collection is visually distinct with accent colors (Stone, Amber, Rose, Indigo, Emerald)

Items

  • Add items to any collection with fully customizable fields
  • 11 field types supported:
    • Text β€” short single-line values
    • Long Text β€” notes, descriptions, paragraphs
    • Rating β€” interactive 1–5 star selector
    • Status β€” pick from predefined options (e.g. To Watch / Watching / Watched)
    • Tags β€” comma-separated tag list
    • URL β€” link to external resources
    • Date β€” date picker
    • Image β€” image URL with preview
    • Toggle β€” simple boolean switch
    • Select β€” generic option selector
  • Mark items as favorites with a heart icon
  • Delete items with confirmation

Search, Filter & Sort

  • Real-time search across all field values in all collections
  • Filter by collection, view All Items, or browse Favorites
  • Sort by: Newest, Oldest, Title (A–Z), Highest Rated

UI & Experience

  • Dark / Light mode toggle
  • Fully responsive β€” works on mobile, tablet, and desktop
  • Mobile navigation via slide-out drawer
  • Masonry-style card grid
  • Smooth transitions and hover effects
  • Data persists across page refreshes via localStorage

Tech Stack

Layer Technology
Framework React 18
Language TypeScript 5
Build Tool Vite 5
Styling Tailwind CSS (CDN)
Icons Lucide React
ID Generation uuid
Class Utilities clsx + tailwind-merge
Storage Browser localStorage

Getting Started

Prerequisites

  • Node.js (v18 or later recommended)

Installation

# Clone the repository
git clone https://github.com/YOUR_USERNAME/shelf.git
cd shelf
# Install dependencies
npm install
# Start the development server
npm run dev

The app will be available at http://localhost:5173.

Build for Production

npm run build # Type-check and bundle
npm run preview # Serve the production build locally

Project Structure

shelf/
β”œβ”€β”€ index.html # HTML entry point (fonts, Tailwind CDN)
β”œβ”€β”€ index.tsx # React app bootstrap
β”œβ”€β”€ App.tsx # Root component β€” state, layout, logic
β”œβ”€β”€ types.ts # TypeScript interfaces (Item, Collection, AppState...)
β”œβ”€β”€ constants.ts # Colors, icons, seed data
β”œβ”€β”€ vite.config.ts # Vite configuration
β”œβ”€β”€ tsconfig.json # TypeScript configuration
└── components/
 β”œβ”€β”€ UI.tsx # Reusable primitives (Button, Input, Modal, Badge...)
 β”œβ”€β”€ Sidebar.tsx # Navigation sidebar
 β”œβ”€β”€ ItemCard.tsx # Card component for individual items
 β”œβ”€β”€ ItemModal.tsx # Slide-in panel for creating / editing items
 └── CollectionModal.tsx # Dialog for creating new collections

Data Model

interface Collection {
 id: string;
 name: string;
 icon: string; // Lucide icon name
 color: string; // Tailwind color key
 description?: string;
 fields: FieldDefinition[];
 itemIds: string[];
}
interface Item {
 id: string;
 collectionId: string;
 dateAdded: string;
 isFavorite: boolean;
 fieldValues: Record<string, any>;
}
interface FieldDefinition {
 id: string;
 name: string;
 type: FieldType;
 options?: string[]; // For status / select fields
}

Roadmap

  • Import / Export collections as JSON
  • Drag-and-drop reordering of items
  • Cloud sync (optional, opt-in)
  • Cover art auto-fetching (OMDB, Open Library API)
  • Keyboard navigation
  • Custom field ordering
  • Bulk actions (delete, move, tag)

Contributing

Contributions are welcome! Please open an issue to discuss ideas or report bugs before submitting a pull request.

  1. Fork the repository
  2. Create a feature branch: git checkout -b feat/your-feature
  3. Commit your changes: git commit -m "feat: add your feature"
  4. Push to your branch: git push origin feat/your-feature
  5. Open a Pull Request

License

MIT β€” see LICENSE for details.


Made with care for the things worth collecting.

About

Online shelf app

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

AltStyle γ«γ‚ˆγ£γ¦ε€‰ζ›γ•γ‚ŒγŸγƒšγƒΌγ‚Έ (->γ‚ͺγƒͺγ‚ΈγƒŠγƒ«) /