Your personal productivity companion that adapts to your life
A modern, privacy-first Bullet Journal Progressive Web App that combines the proven Bullet Journal methodology with smart features like recurring tasks, mood tracking, and productivity insights.
- ๐ True Bullet Journal Methodology - Rapid logging with bullets, tasks, events, and notes
- ๐ฑ Mobile-First PWA - Works offline, installable on any device
- ๐ Smart Recurring Tasks - Daily, weekly, monthly, and yearly task patterns
- ๐ Mood Tracking Timeline - Log multiple moods per day with contextual notes
- ๐ Productivity Insights - Activity heatmaps and performance analytics
- ๐ Collections - Organize related entries and tasks
- ๐ฏ Multi-View Navigation - Daily, Weekly, Monthly, and Index views
- ๐ Privacy-First - All data stored locally in SQLite
- ๐จ Beautiful Design - Clean, minimal interface with dark mode
- ๐ฐ Free & Open Source - MIT licensed
Railway is the recommended cloud platform as it natively supports SQLite with persistent volumes.
# Clone the repository
git clone https://github.com/Self-Journal/self-journal.git
cd selfjournal
# Copy environment variables
cp .env.example .env
# Edit .env and set your NEXTAUTH_SECRET
# Generate one with: openssl rand -base64 32
# Start with Docker Compose
docker-compose up -d
# Access at http://localhost:3000# Clone the repository
git clone https://github.com/Self-Journal/self-journal.git
cd selfjournal
# Install dependencies
npm install
# Set up environment variables
cp .env.example .env
# Edit .env and add your NEXTAUTH_SECRET
# Start development server
npm run dev
# Access at http://localhost:3000Want to run a public demo instance? Enable demo mode for automatic login and sample data:
# Docker Compose
DEMO_MODE=true docker-compose up -d
# Or add to your .env file
DEMO_MODE=trueWhen DEMO_MODE=true:
- โ Auto-login - Users are automatically logged in as a demo user
- โ Sample data - Pre-populated with tasks, collections, and mood entries
- โ Demo banner - Fixed footer banner indicates this is a demo instance
- โ Auto-seed - Demo user is created automatically on first startup
Demo credentials (if manual login is needed):
- Username:
demo - Password:
demo123
See DEMO_MODE.md for detailed documentation.
- Click the "Deploy on Railway" button above
- Railway will auto-generate
NEXTAUTH_SECRET - Set
NEXTAUTH_URLto your Railway URL - Railway automatically creates a persistent volume for your SQLite database
Why Railway?
- โ Native SQLite support with persistent volumes
- โ Automatic SSL certificates
- โ Free tier available ($5 credit/month)
- โ Zero configuration needed
- โ Perfect for production use
Using Docker Compose (Recommended):
docker-compose up -dManual Docker:
# Build the image
docker build -t selfjournal .
# Run the container
docker run -d \
-p 3000:3000 \
-e NEXTAUTH_SECRET="your-secret-here" \
-e NEXTAUTH_URL="https://yourdomain.com" \
-v selfjournal-data:/app/data \
--name selfjournal \
selfjournal# Install Node.js 20+
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
sudo apt-get install -y nodejs
# Clone and setup
git clone https://github.com/Self-Journal/self-journal.git
cd selfjournal
npm install
npm run build
# Set up environment
cp .env.example .env
# Edit .env with your values
# Start with PM2 (production process manager)
npm install -g pm2
pm2 start npm --name selfjournal -- start
pm2 save
pm2 startup| Variable | Description | Required | Default |
|---|---|---|---|
NEXTAUTH_SECRET |
Secret key for authentication (generate with openssl rand -base64 32) |
โ Yes | - |
NEXTAUTH_URL |
Canonical URL of your deployment | โ Yes | http://localhost:3000 |
NODE_ENV |
Environment mode | No | development |
- Register - Create your account (data stored locally)
- Setup - Choose your journaling preferences
- Start Logging - Use the Daily view to track tasks and moods
- โข Bullet - Open task
- ร Complete - Finished task
- > Migrated - Moved to another day
- < Scheduled - Planned for future
- - Note - General note
- โ Event - Special event
- Daily - Focus on today's tasks and mood
- Weekly - Plan and review your week
- Monthly - Big picture overview
- Index - Quick navigation and search
- Collections - Organize related tasks and notes
- Create a task in Daily view
- Tap the task menu (โฎ)
- Select "Make Recurring"
- Choose pattern: Daily, Weekly, Monthly, or Yearly
- Task automatically appears on future dates
- Tap a mood emoji in Daily view
- Optionally add a note (predefined or custom)
- Track multiple moods throughout the day
- View your mood timeline and patterns
- Framework: Next.js 15 (App Router)
- Language: TypeScript
- Database: SQLite (better-sqlite3)
- Auth: NextAuth.js
- Styling: Tailwind CSS
- Components: shadcn/ui
- PWA: next-pwa
- Deployment: Docker, Vercel, Railway
SelfJournal uses SQLite for local-first data storage:
users- User accountsentries- Daily/Weekly/Monthly journal entriestasks- Tasks with bullet symbols and recurrencemood_entries- Multiple mood logs per daycollections- Custom collectionscollection_items- Items within collections
See lib/db.ts for complete schema.
Contributions are welcome! Please read our Contributing Guide first.
# Fork and clone
git clone https://github.com/YOUR_USERNAME/selfjournal.git
# Install dependencies
npm install
# Create feature branch
git checkout -b feature/amazing-feature
# Make changes and test
npm run dev
# Commit with conventional commits
git commit -m "feat: add amazing feature"
# Push and create PR
git push origin feature/amazing-featureSee FUTURE_FEATURES.md for planned features.
Short-term:
- Cloud sync (optional)
- Native mobile apps (iOS/Android)
- Import/Export (JSON, Markdown)
- Templates gallery
- Habit tracking
Long-term:
- Collaboration features
- AI-powered insights
- Integration ecosystem
- Multi-language support
Click to see all views
Daily View Track your daily tasks, events, and mood
Weekly View Plan and review your week at a glance
Monthly View Big picture overview of your month
Collections Organize related tasks and notes in custom collections
MIT License - see LICENSE for details.
- Inspired by the Bullet Journal Method by Ryder Carroll
- Built with Next.js
- UI components from shadcn/ui
- Icons from Lucide
- GitHub Issues: Report bugs or request features
- Discussions: Join the conversation
- Twitter: @lucianfialho
If you find SelfJournal useful, please consider giving it a star! It helps others discover the project.
Made with โค๏ธ for mindful productivity
