Skip to content

noxire-dev/moji

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

50 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

Moji Moji

A workspace-centric productivity app for developers

Organize your todos, notes, and pages by project โ€” not by endless lists.

License Next.js FastAPI TypeScript


โœจ Why Moji?

Notion is great, but sometimes you just want a focused space for a project โ€” tasks on one side, notes on the other, and rich pages for documentation. No databases, no templates, no friction. Just workspaces that keep you in flow.

๐ŸŽฏ Key Features

  • ๐Ÿ“ Workspaces โ€” Create project-specific spaces to organize everything
  • โœ… Tasks โ€” Quick todos with priorities (none, low, medium, high)
  • ๐Ÿ“ Notes โ€” Titled notes with content and tags for quick reference
  • ๐Ÿ“„ Pages โ€” Rich text pages for detailed documentation within workspaces
  • ๐ŸŽจ Themes โ€” Multiple beautiful themes including Japanese Pastel
  • ๐Ÿ” Authentication โ€” Secure auth via Supabase with row-level security
  • ๐Ÿ“ฑ Responsive โ€” Works beautifully on desktop and mobile
  • ๐ŸŽญ Demo Mode โ€” Try the app without signing up

๐Ÿ› ๏ธ Tech Stack

Backend

  • FastAPI โ€” Modern, fast Python web framework
  • Supabase โ€” PostgreSQL database with real-time capabilities
  • Pydantic โ€” Data validation and settings management
  • Python-JOSE โ€” JWT authentication

Frontend

  • Next.js 14 โ€” React framework with App Router
  • TypeScript โ€” Type-safe development
  • Tailwind CSS โ€” Utility-first styling
  • Radix UI โ€” Accessible component primitives
  • SWR โ€” Data fetching and caching
  • Sonner โ€” Beautiful toast notifications

Infrastructure

  • Supabase โ€” Database, authentication, and storage
  • PostgreSQL โ€” Relational database with RLS

๐Ÿ“ Project Structure

moji/
โ”œโ”€โ”€ backend/
โ”‚   โ”œโ”€โ”€ app/
โ”‚   โ”‚   โ”œโ”€โ”€ main.py          # FastAPI application
โ”‚   โ”‚   โ”œโ”€โ”€ config.py        # Settings and environment variables
โ”‚   โ”‚   โ”œโ”€โ”€ dependencies.py  # Auth and Supabase clients
โ”‚   โ”‚   โ”œโ”€โ”€ models/          # Pydantic schemas
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ workspace.py
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ task.py
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ note.py
โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ page.py
โ”‚   โ”‚   โ””โ”€โ”€ routes/          # API endpoints
โ”‚   โ”‚       โ”œโ”€โ”€ workspaces.py
โ”‚   โ”‚       โ”œโ”€โ”€ tasks.py
โ”‚   โ”‚       โ”œโ”€โ”€ notes.py
โ”‚   โ”‚       โ””โ”€โ”€ pages.py
โ”‚   โ””โ”€โ”€ requirements.txt
โ”œโ”€โ”€ frontend/
โ”‚   โ”œโ”€โ”€ app/                 # Next.js pages (App Router)
โ”‚   โ”‚   โ”œโ”€โ”€ page.tsx         # Dashboard
โ”‚   โ”‚   โ”œโ”€โ”€ login/
โ”‚   โ”‚   โ”œโ”€โ”€ profile/
โ”‚   โ”‚   โ”œโ”€โ”€ settings/
โ”‚   โ”‚   โ””โ”€โ”€ workspaces/
โ”‚   โ”‚       โ””โ”€โ”€ [id]/
โ”‚   โ”‚           โ”œโ”€โ”€ page.tsx # Workspace detail
โ”‚   โ”‚           โ””โ”€โ”€ pages/
โ”‚   โ”‚               โ””โ”€โ”€ [pageId]/
โ”‚   โ”œโ”€โ”€ components/          # React components
โ”‚   โ”‚   โ”œโ”€โ”€ ui/              # shadcn/ui components
โ”‚   โ”‚   โ”œโ”€โ”€ Sidebar.tsx
โ”‚   โ”‚   โ”œโ”€โ”€ TaskList.tsx
โ”‚   โ”‚   โ”œโ”€โ”€ NoteList.tsx
โ”‚   โ”‚   โ”œโ”€โ”€ PageEditor.tsx
โ”‚   โ”‚   โ””โ”€โ”€ ...
โ”‚   โ””โ”€โ”€ lib/                 # Utilities
โ”‚       โ”œโ”€โ”€ api.ts           # API client
โ”‚       โ”œโ”€โ”€ supabase.ts      # Supabase client
โ”‚       โ”œโ”€โ”€ themes.ts        # Theme system
โ”‚       โ””โ”€โ”€ hooks.ts
โ””โ”€โ”€ supabase/
    โ”œโ”€โ”€ schema.sql           # Database schema
    โ””โ”€โ”€ add_pages.sql        # Pages table migration

๐Ÿš€ Getting Started

Prerequisites

  • Node.js 18+ and npm
  • Python 3.10+
  • Supabase account (free tier works)

1. Supabase Setup

  1. Create a new project at supabase.com
  2. Go to SQL Editor and run the contents of supabase/schema.sql
  3. Run supabase/add_pages.sql to add the pages table
  4. Enable Email/Password auth in Authentication > Providers
  5. Get your API keys from Settings > API:
    • Project URL
    • anon key (public)
    • service_role key (secret, backend only)

2. Backend Setup

cd backend

# Create virtual environment
python -m venv venv

# Activate virtual environment
# On Windows:
venv\Scripts\activate
# On macOS/Linux:
source venv/bin/activate

# Install dependencies
pip install -r requirements.txt

# Create .env file
cat > .env << EOF
SUPABASE_URL=https://your-project.supabase.co
SUPABASE_ANON_KEY=your-anon-key
SUPABASE_SERVICE_KEY=your-service-role-key
DEBUG=true
ALLOWED_ORIGINS=http://localhost:3000
EOF

# Run the server
uvicorn app.main:app --reload --port 8000

The API will be available at http://localhost:8000 with interactive docs at /docs.

3. Frontend Setup

cd frontend

# Install dependencies
npm install

# Create .env.local file
cat > .env.local << EOF
NEXT_PUBLIC_SUPABASE_URL=https://your-project.supabase.co
NEXT_PUBLIC_SUPABASE_ANON_KEY=your-anon-key
NEXT_PUBLIC_API_URL=http://localhost:8000
EOF

# Run the dev server
npm run dev

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


๐Ÿ“ก API Endpoints

All endpoints require authentication via Bearer token (Supabase JWT) in the Authorization header.

Workspaces

Method Endpoint Description
GET /api/v1/workspaces List all workspaces
POST /api/v1/workspaces Create workspace
PUT /api/v1/workspaces/{id} Update workspace
DELETE /api/v1/workspaces/{id} Delete workspace

Tasks

Method Endpoint Description
GET /api/v1/workspaces/{id}/tasks List tasks in workspace
POST /api/v1/workspaces/{id}/tasks Create task
PUT /api/v1/tasks/{id} Update task
PATCH /api/v1/tasks/{id}/toggle Toggle task completion
DELETE /api/v1/tasks/{id} Delete task

Notes

Method Endpoint Description
GET /api/v1/workspaces/{id}/notes List notes in workspace
POST /api/v1/workspaces/{id}/notes Create note
PUT /api/v1/notes/{id} Update note
DELETE /api/v1/notes/{id} Delete note

Pages

Method Endpoint Description
GET /api/v1/workspaces/{id}/pages List pages in workspace
POST /api/v1/workspaces/{id}/pages Create page
GET /api/v1/pages/{id} Get specific page
PUT /api/v1/pages/{id} Update page
DELETE /api/v1/pages/{id} Delete page

Health Check

Method Endpoint Description
GET / API status
GET /health Detailed health check

๐ŸŽจ Features in Detail

Workspaces

Create project-specific spaces to organize your work. Each workspace contains its own tasks, notes, and pages.

Tasks

  • Quick todos with content
  • Priority levels: none, low, medium, high
  • Toggle completion status
  • Organized by workspace

Notes

  • Titled notes with rich content
  • Tag support for organization
  • Quick access from workspace sidebar

Pages

  • Rich text pages for detailed documentation
  • Full-page editor with auto-save
  • Organized within workspaces
  • Perfect for project documentation

Themes

  • Default โ€” Clean dark theme with blue accents
  • Japanese Pastel โ€” Soft lavender and sakura tones with paper texture
  • More themes coming soon!

Security

  • Row-level security (RLS) ensures users only see their own data
  • JWT-based authentication via Supabase
  • Secure API endpoints with user verification

๐Ÿ”ฎ Future Plans

  • Real-time updates with Supabase subscriptions
  • Drag-and-drop task reordering
  • Markdown support for notes and pages
  • Search across workspaces
  • More theme options
  • Mobile app (React Native)
  • Workspace sharing and collaboration
  • Export/import functionality

๐Ÿ“„ License

This project is licensed under the Apache License 2.0 โ€” see the LICENSE file for details.


๐Ÿ‘ค Author

Noxire-Hash


Built with โค๏ธ using FastAPI, Next.js, and Supabase

About

Moji is a todo app for developers

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •