A minimalist space for honest reflection.
Write what matters. Once. Without revision.
ichido (一度, "once" or "one time") embodies a simple truth: authentic expression comes before perfect editing.
The interface enforces forward-only writing. Once you complete a word (spacebar), it becomes immutable. This constraint creates space for:
- Honest intention setting without self-censorship
- Gratitude practice that captures first impressions
- Reflective dialogue with what you hold sacred (universe, future self, loved ones, the divine)
No affiliation required. No beliefs enforced. Just presence and attention.
- Presence over Perfection - The inability to edit keeps you in the present moment
- Simplicity as Feature - Zero configuration, zero distractions, zero data tracking
- Privacy by Design - Everything stays in your browser's local storage
- Zero Runtime Dependencies - Vanilla TypeScript, no framework bloat
# Install dependencies
npm install
# Start development server
npm run dev
# Build for production
npm run build- TypeScript - Strict mode, no compromises
- Vite - Build tool and dev server
- Vitest - Unit testing
- Playwright - E2E testing (cross-browser)
src/
├── main.ts # Entry point
├── app.ts # Application orchestration
├── types.ts # TypeScript interfaces
├── config.ts # Constants
├── icons.ts # SVG definitions
├── modules/
│ ├── state.ts # localStorage operations
│ ├── editor.ts # Editor logic and rendering
│ ├── ui.ts # UI components and themes
│ └── prompts.ts # Guided mode system
└── styles/
└── main.css # All styling
# Unit tests
npm test # Run once
npm run test:ui # Interactive UI
npm run test:coverage # Coverage report
# E2E tests (Playwright)
npm run test:e2e # Headless
npm run test:e2e:ui # InteractiveSee CONTRIBUTING.md for guidelines.
Key areas for contribution:
- Accessibility improvements - Screen reader support, keyboard navigation
- Internationalization - Translations for UI and guided prompts
- Mobile optimization - Touch interactions, responsive design
- Optional features - Export formats, encryption, sync (as opt-in plugins)
What we collect: Nothing.
Where your data lives: Your browser's localStorage only.
How to export: Use the "Copy" button on any reflection in Archives.
How to delete: Click "Delete" on individual reflections, or clear browser data.
Current: v1.0 - Core experience with modular architecture
Exploring:
- Mobile app (PWA first, native later)
- Optional end-to-end encrypted sync
- Plugin system for custom prompts
- Export to PDF/Markdown
- Accessibility audit and improvements
We ship slowly. Every feature must justify its complexity cost.
Read PHILOSOPHY.md for the full design reasoning.
TLDR: This app believes:
- Authentic expression > polished performance
- Constraints enable creativity
- Privacy is not negotiable
- Simplicity serves everyone
- Questions: Open a Discussion
- Bugs: File an Issue
- Donations:
MIT License - see LICENSE for details.
Built by Lee Kai Ze with the belief that honest reflection should be accessible to everyone.
