Skip to content

dvinix/Cryptora

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

33 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Cryptora Logo

πŸ” Cryptora

Your Notes, Truly Private
End-to-end encrypted notepad with zero-knowledge architecture

Features β€’ Tech Stack β€’ Architecture β€’ Getting Started β€’ API β€’ Screenshots

Python FastAPI PostgreSQL React TypeScript TailwindCSS

License PRs Welcome Made with Love


✨ What is Cryptora?

Cryptora is a privacy-first encrypted notepad where your notes are protected with bank-level security. Unlike other note apps, your password never leaves your deviceβ€”all encryption happens in your browser before anything touches our servers.

πŸ›‘οΈ Zero-Knowledge: We literally cannot read your notes, even if we wanted to.


🎯 Features


Zero-Knowledge
Your encryption key never touches our servers

Bank-Level Security
AES-256-GCM encryption standard

Private by Default
No tracking, no analytics, no data collection

Instant Access
No sign-up required, just alias & password

Auto-Save
Changes saved automatically as you type

One-Click Copy
Copy your notes instantly to clipboard

πŸ› οΈ Tech Stack

Backend

Technology Purpose Why?
Core Language Robust, readable, extensive crypto libraries
API Framework Async, fast, auto-documentation
Database ACID compliance, secure data storage
ORM Type-safe database operations
Migrations Version-controlled schema changes
ASGI Server Lightning-fast async server

Frontend

Technology Purpose Why?
UI Framework Component-based, reactive UI
Language Type safety, better DX
Build Tool Instant HMR, fast builds
Styling Utility-first, rapid UI development
Animations Smooth, professional animations
Components Beautiful, accessible components

πŸ—οΈ Architecture

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                         CLIENT BROWSER                          β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”‚
β”‚  β”‚  React + TypeScript + Tailwind + Framer Motion          β”‚   β”‚
β”‚  β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”‚   β”‚
β”‚  β”‚  β”‚   Editor    β”‚    β”‚  Encryption β”‚    β”‚   Notes    β”‚   β”‚   β”‚
β”‚  β”‚  β”‚  Component  │───▢│  (AES-256)  │───▢│   List     β”‚   β”‚   β”‚
β”‚  β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β”‚   β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β”‚
β”‚                              β”‚                                   β”‚
β”‚                    Encrypted Data Only                          β”‚
β”‚                              β–Ό                                   β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                               β”‚
                               β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                       BACKEND SERVER                             β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”‚
β”‚  β”‚              FastAPI + Python + SQLAlchemy              β”‚   β”‚
β”‚  β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”‚   β”‚
β”‚  β”‚  β”‚    REST     β”‚    β”‚   Business  β”‚    β”‚    ORM     β”‚   β”‚   β”‚
β”‚  β”‚  β”‚     API     │───▢│    Logic    │───▢│   Layer    β”‚   β”‚   β”‚
β”‚  β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β”‚   β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β”‚
β”‚                              β”‚                                   β”‚
β”‚                              β–Ό                                   β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”‚
β”‚  β”‚                    PostgreSQL Database                   β”‚   β”‚
β”‚  β”‚         Stores only encrypted blobs - Zero Knowledge     β”‚   β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

πŸš€ Getting Started

Prerequisites

  • Python 3.8+
  • Node.js 18+
  • PostgreSQL 12+

Installation

# Clone the repository
git clone https://github.com/divinixx/Cryptora.git
cd Cryptora

Backend Setup

cd backend

# Create virtual environment
python -m venv venv
venv\Scripts\activate        # Windows
# source venv/bin/activate   # macOS/Linux

# Install dependencies
pip install -r requirements.txt

# Configure environment
cp .env.example .env
# Edit .env with your PostgreSQL credentials

# Run migrations
alembic upgrade head

# Start server
uvicorn app.main:app --reload --port 8000

Frontend Setup

cd frontend

# Install dependencies
npm install

# Start development server
npm run dev

Access the App

Service URL
🌐 Frontend http://localhost:5173
πŸ”Œ Backend API http://localhost:8000
πŸ“š API Docs (Swagger) http://localhost:8000/docs
πŸ“– API Docs (ReDoc) http://localhost:8000/redoc

πŸ“‘ API Reference

Endpoints Overview

Method Endpoint Description
GET /health Health check
POST /api/v1/auth/register Create new user
POST /api/v1/auth/login Authenticate user
GET /api/v1/{alias}/notes Get all notes
POST /api/v1/{alias}/notes Create new note
GET /api/v1/{alias}/notes/{id} Get specific note
PUT /api/v1/{alias}/notes/{id} Update note
DELETE /api/v1/{alias}/notes/{id} Delete note

Example Request

# Create encrypted note
curl -X POST http://localhost:8000/api/v1/myalias/notes \
  -H "Content-Type: application/json" \
  -H "X-Password: your-master-password" \
  -d '{
    "title": "My Secret Note",
    "content": "This gets encrypted before storage"
  }'

πŸ“ Project Struct.

Cryptora/
β”œβ”€β”€ πŸ“‚ backend/
β”‚   β”œβ”€β”€ πŸ“‚ app/
β”‚   β”‚   β”œβ”€β”€ πŸ“‚ models/         # SQLAlchemy models
β”‚   β”‚   β”œβ”€β”€ πŸ“‚ schemas/        # Pydantic schemas
β”‚   β”‚   β”œβ”€β”€ πŸ“‚ routers/        # API endpoints
β”‚   β”‚   β”œβ”€β”€ πŸ“‚ services/       # Business logic
β”‚   β”‚   β”œβ”€β”€ πŸ“„ config.py       # Configuration
β”‚   β”‚   β”œβ”€β”€ πŸ“„ database.py     # DB connection
β”‚   β”‚   └── πŸ“„ main.py         # FastAPI app
β”‚   β”œβ”€β”€ πŸ“‚ alembic/            # Migrations
β”‚   β”œβ”€β”€ πŸ“„ requirements.txt
β”‚   └── πŸ“„ run.py
β”‚
β”œβ”€β”€ πŸ“‚ frontend/
β”‚   β”œβ”€β”€ πŸ“‚ src/
β”‚   β”‚   β”œβ”€β”€ πŸ“‚ components/     # React components
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“‚ ui/         # ShadCN components
β”‚   β”‚   β”‚   └── πŸ“‚ notes/      # Note components
β”‚   β”‚   β”œβ”€β”€ πŸ“‚ pages/          # Page components
β”‚   β”‚   β”œβ”€β”€ πŸ“‚ context/        # React context
β”‚   β”‚   β”œβ”€β”€ πŸ“‚ lib/            # Utilities
β”‚   β”‚   β”œβ”€β”€ πŸ“„ App.tsx
β”‚   β”‚   └── πŸ“„ main.tsx
β”‚   β”œβ”€β”€ πŸ“„ package.json
β”‚   └── πŸ“„ vite.config.ts
β”‚
└── πŸ“„ README.md

πŸ”’ Security Model

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                   YOUR BROWSER                      β”‚
β”‚                                                     β”‚
β”‚   Password ──▢ Derive Key ──▢ Encrypt ──▢ Send    β”‚
β”‚      πŸ”‘            πŸ”            πŸ”’         πŸ“€      β”‚
β”‚                                                     β”‚
β”‚   βœ… Password stays here                           β”‚
β”‚   βœ… Key derived locally                           β”‚
β”‚   βœ… Only encrypted data leaves                    β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                        β”‚
                        β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                   OUR SERVER                        β”‚
β”‚                                                     β”‚
β”‚   ❌ Never sees password                           β”‚
β”‚   ❌ Cannot decrypt content                        β”‚
β”‚   βœ… Stores encrypted blobs only                   β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

πŸ“Έ Screenshots

Landing Page
Cryptora Landing Page

Dashboard - Your Encrypted Notepad
Cryptora Dashboard


🀝 Contributing

Contributions are what make the open-source community amazing! Any contributions you make are greatly appreciated.

  1. Fork the Project
  2. Create your Feature Branch (git checkout -b feature/AmazingFeature)
  3. Commit your Changes (git commit -m 'Add some AmazingFeature')
  4. Push to the Branch (git push origin feature/AmazingFeature)
  5. Open a Pull Request

πŸ“œ License

Distributed under the MIT License. See LICENSE for more information.


πŸ’¬ Connect

GitHub


Built with ❀️ for everyone who values privacy
Your thoughts deserve to stay yours.

Star

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors