A film photography inventory management system for analog photographers. Track your film stock, plan trips, and manage gear.
Built with Next.js 16, TypeScript, Supabase, and Radix UI.
The repo also includes a native SwiftUI iOS companion app in ios/.
It talks directly to the same Supabase project for auth, films, gear, trips,
and shared reservation workflows.
- Track film by brand, ISO, format (35mm, 120, 4x5), and type (color negative, B&W, slide)
- Expiration date monitoring with visual timeline
- Bulk film support with automatic roll calculations
- Usage history and statistics
- Soft-delete with recovery
- Catalog cameras, lenses, flashes, accessories, and more
- Track condition, serial numbers, and purchase info
- Link lenses to cameras
- Plan photo trips with date ranges and descriptions
- Reserve films for specific trips
- Pack gear for each trip
- Auto-consume reserved films when trips complete
- Framework: Next.js 16 (App Router)
- Language: TypeScript
- Database: Supabase (PostgreSQL + Auth)
- UI: Radix UI + Tailwind CSS
- Charts: Recharts
- Testing: Vitest + Playwright
- Node.js 18+
- pnpm (recommended) or npm
- Supabase account
-
Clone the repository:
git clone https://github.com/yourusername/fuinnosho.git cd fuinnosho -
Install dependencies:
pnpm install
-
Copy the environment file:
cp .env.example .env.local
-
Configure your environment variables in
.env.local:NEXT_PUBLIC_SUPABASE_URL=your_supabase_url NEXT_PUBLIC_SUPABASE_ANON_KEY=your_supabase_anon_key SUPABASE_SERVICE_ROLE_KEY=your_service_role_key FILM_API_SECRET=your_api_secret -
Run database migrations in your Supabase project (see
supabase/migrations/) -
Start the development server:
pnpm dev
For detailed setup instructions, see docs/SETUP.md.
Fuinnosho includes an MCP server for integration with Claude Desktop. See README-MCP.md for setup instructions.
The native iOS app lives in ios/ and is generated with XcodeGen from
ios/project.yml. See ios/README.md for
setup, Supabase config, and verification commands.
MOBILE_PROBE_USER_ID=<auth-user-id> \
MOBILE_WRITE_SMOKE=1 \
MOBILE_SMOKE_CREATE_USER=1 \
pnpm verify:mobileios/
├── Fuinnosho/ # SwiftUI app source
├── FuinnoshoTests/ # XCTest coverage
└── project.yml # XcodeGen project definition
src/
├── app/ # Next.js App Router pages
│ ├── films/ # Film inventory
│ ├── gear/ # Gear management
│ ├── trips/ # Trip planning
│ └── settings/ # Account settings
├── components/ # React components
├── lib/ # Utilities and Supabase client
└── types/ # TypeScript types
supabase/
└── migrations/ # Database migrations
# Run unit tests
pnpm test
# Run tests with coverage
pnpm test:coverage
# Run E2E tests
pnpm test:e2eSee CONTRIBUTING.md for guidelines on how to contribute.
Fuinnosho (封印書) - A reference to the Scroll of Seals from Naruto. Film rolls resemble the scroll's visual design.



