{"id":47207329,"url":"https://github.com/typelets/typelets-app","last_synced_at":"2026-03-13T14:31:57.620Z","repository":{"id":313273813,"uuid":"1036928184","full_name":"typelets/typelets-app","owner":"typelets","description":"A secure, encrypted notes application with client-side encryption, rich text editing, and modern React UI - your thoughts, protected with zero-knowledge architecture","archived":false,"fork":false,"pushed_at":"2025-12-19T15:55:09.000Z","size":16207,"stargazers_count":3,"open_issues_count":5,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-12-20T06:26:46.034Z","etag":null,"topics":["client-side-encryption","encryption","note-taking-app","note-taking-application","rich-text-editor"],"latest_commit_sha":null,"homepage":"https://typelets.com","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/typelets.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-08-12T19:44:48.000Z","updated_at":"2025-12-19T15:55:04.000Z","dependencies_parsed_at":"2025-09-19T17:10:02.176Z","dependency_job_id":"2fd41f6e-a4d8-4e4e-b035-cc285d1efab4","html_url":"https://github.com/typelets/typelets-app","commit_stats":null,"previous_names":["typelets/typelets-app"],"tags_count":213,"template":false,"template_full_name":null,"purl":"pkg:github/typelets/typelets-app","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typelets%2Ftypelets-app","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typelets%2Ftypelets-app/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typelets%2Ftypelets-app/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typelets%2Ftypelets-app/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/typelets","download_url":"https://codeload.github.com/typelets/typelets-app/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typelets%2Ftypelets-app/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30468293,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-13T11:00:43.441Z","status":"ssl_error","status_checked_at":"2026-03-13T11:00:23.173Z","response_time":60,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["client-side-encryption","encryption","note-taking-app","note-taking-application","rich-text-editor"],"created_at":"2026-03-13T14:31:56.762Z","updated_at":"2026-03-13T14:31:57.599Z","avatar_url":"https://github.com/typelets.png","language":"TypeScript","readme":"# Typelets - Secure Notes\n\n\u003cdiv style=\"text-align: left;\"\u003e\n\n[![Version](https://img.shields.io/github/v/release/typelets/typelets-app)](https://github.com/typelets/typelets-app/releases)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n[![CI](https://github.com/typelets/typelets-app/actions/workflows/release.yml/badge.svg)](https://github.com/typelets/typelets-app/actions)\n[![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg)](https://github.com/typelets/typelets-app/pulls)\n[![React](https://img.shields.io/badge/React-19-blue?logo=react)](https://react.dev/)\n[![TypeScript](https://img.shields.io/badge/TypeScript-5.8-blue?logo=typescript)](https://www.typescriptlang.org/)\n[![Vite](https://img.shields.io/badge/Vite-7-646CFF?logo=vite)](https://vitejs.dev/)\n[![Tailwind CSS](https://img.shields.io/badge/Tailwind-4-38B2AC?logo=tailwind-css)](https://tailwindcss.com/)\n\n[![Node](https://img.shields.io/badge/node-%3E%3D20-brightgreen?logo=node.js)](https://nodejs.org)\n[![pnpm](https://img.shields.io/badge/pnpm-%3E%3D9.15-F69220?logo=pnpm)](https://pnpm.io/)\n[![Docker](https://img.shields.io/badge/Docker-ready-2496ED?logo=docker)](https://www.docker.com/)\n\n\u003c/div\u003e\n\n\u003cdiv style=\"text-align: left;\"\u003e\n  \u003ch3\u003eA secure, encrypted notes application where your data remains truly private\u003c/h3\u003e\n  \u003cp\u003eEven we can't read your notes - Built with modern web technologies and client-side encryption\u003c/p\u003e\n\u003c/div\u003e\n\n![Typelets Demo](https://github.com/typelets/typelets-app/blob/main/assets/demo.gif)\n\n## 📱 Mobile App\n\nAvailable on iOS and Android with the same powerful features and encryption.\n\n- [Download on the App Store](https://apps.apple.com/us/app/typelets/id6753926295)\n- [Get it on Google Play](https://play.google.com/store/apps/details?id=com.typelets.notes\u0026pcampaignid=web_share)\n\n\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"https://typelets.com/assets/images/mobile/screenshot-1.png\" width=\"250\" alt=\"Mobile Screenshot 1\"/\u003e\n  \u0026nbsp;\u0026nbsp;\n  \u003cimg src=\"https://typelets.com/assets/images/mobile/screenshot-2.png\" width=\"250\" alt=\"Mobile Screenshot 2\"/\u003e\n  \u0026nbsp;\u0026nbsp;\n  \u003cimg src=\"https://typelets.com/assets/images/mobile/screenshot-3.png\" width=\"250\" alt=\"Mobile Screenshot 3\"/\u003e\n\u003c/div\u003e\n\n\n- 📱 Native iOS and Android apps\n- 🔐 Same client-side encryption\n- 🔄 Real-time sync across all devices\n- ✍️ Full-featured WYSIWYG editor\n- 🎨 Native mobile experience\n\n## ✨ Features\n\n### 🔒 Security \u0026 Privacy\n- 🔐 **Client-side AES-256-GCM encryption** - Your notes are encrypted before leaving your device\n- 🔑 **Master password management** - Change your master password with automatic key re-derivation\n- 🛡️ **Zero-knowledge architecture** - Server never sees unencrypted data\n- 🔄 **Real-time sync** - Access your notes from anywhere securely\n\n### 📁 Organization \u0026 Management\n- 📁 **Nested folder organization** - Create unlimited folder hierarchies with drag \u0026 drop\n- 🔄 **Move \u0026 organize** - Move notes and folders between locations\n- ⭐ **Star, archive, and organize** - Keep your important notes accessible\n- 🙈 **Hide sensitive notes** - Keep private notes hidden from quick view\n- 🏷️ **Smart filtering \u0026 sorting** - Filter by starred, hidden, with attachments, or sort by date/title\n- 🔍 **Full-text search** - Find notes instantly (searches encrypted data locally)\n\n### ✍️ Advanced Rich Text Editor\n- 📝 **Modern rich text editing** - Powered by TipTap with extensive formatting support\n- 🎨 **Comprehensive formatting** - Bold, italic, underline, strikethrough, highlights\n- 📋 **Lists \u0026 structure** - Bullet lists, numbered lists, task lists, blockquotes\n- 🖼️ **Smart image handling** - Upload, resize, drag \u0026 drop images with visual controls\n- 📑 **Table of contents** - Auto-generated TOC with smooth navigation\n- ⚡ **Slash commands** - Quick formatting with `/` commands (headings, lists, images, etc.)\n- 📋 **Note templates** - Pre-built templates for meetings, projects, daily notes, research, and secure password storage\n- 💾 **Auto-save** - Real-time saving with visual indicators\n- 🔗 **Links \u0026 references** - Easy link insertion and management\n- 🧮 **Code support** - Inline code and code blocks with syntax highlighting\n- ⚡ **Executable code blocks** - Run JavaScript, Python, Java, C++, and 10+ other languages directly in your notes\n\n### 📊 Professional Status Bar\n- 📈 **Real-time statistics** - Word count, character count, reading time estimates\n- 📜 **Scroll tracking** - Visual scroll position indicator\n- 🔍 **Zoom controls** - Adjustable text size (50%-200%) with visual controls\n- 💾 **Save status** - Live save status with visual feedback\n\n### 💻 User Experience\n- 🌙 **Dark/Light mode** - Easy on the eyes, day or night\n- 📎 **File attachments** - Upload and encrypt files up to 10MB per file\n- 📊 **Usage tracking** - Monitor storage and notes limits with visual progress indicators\n- 🌐 **Cross-platform** - Responsive web app that works seamlessly on desktop, tablet, and mobile\n- 🖨️ **Print support** - Clean printing with proper formatting\n\n### 🌐 Public Notes (Sharing)\n- 🔗 **Shareable links** - Publish any note with a unique, unguessable URL\n- 👤 **Optional author attribution** - Add your name or publish anonymously\n- 🎨 **Full formatting preserved** - Rich text, code blocks, images, and diagrams render beautifully\n- 📑 **Table of contents** - Collapsible TOC for easy navigation\n- 🌙 **Theme toggle** - Readers can switch between light and dark mode\n- 📱 **Mobile-friendly** - Responsive design for all screen sizes\n- 🔄 **Auto-sync** - Changes to your note automatically update the public version\n- ❌ **Instant unpublish** - Remove public access at any time (hard delete)\n- 🛡️ **Security hardened** - DOMPurify sanitization, rate limiting, no internal IDs exposed\n- 🔍 **SEO optimized** - Server-side rendering for search engine indexing and social previews\n\n\u003e ⚠️ **Important:** Publishing a note bypasses end-to-end encryption. An unencrypted copy is stored on our servers and anyone with the link can view it. Use this feature only for content you intend to share publicly.\n\n\u003e 💡 **Optional:** For improved SEO on public notes, you can deploy the SSR worker. See [`worker/README.md`](./worker/README.md) for setup instructions.\n\n### ⚡ Executable Code Blocks\n\n![Execute Code Demo](https://github.com/typelets/typelets-app/blob/main/assets/execute-code-demo.gif)\n\n- 💻 **15+ Programming Languages** - JavaScript, TypeScript, Python, Java, C++, C#, Go, Rust, PHP, Ruby, Kotlin, Swift, Bash, SQL, and more\n- 🎨 **Monaco Editor Integration** - Professional VS Code-powered editor with IntelliSense and syntax highlighting\n- ⚡ **One-click Execution** - Run code instantly with the play button or `Ctrl+Enter` keyboard shortcut\n- 📊 **Real-time Status Updates** - Live execution progress from \"In Queue\" → \"Processing\" → \"Complete\"\n- 🔄 **Resizable Code Blocks** - Drag to adjust editor height for optimal viewing\n- 🌙 **Theme Toggle** - Switch between light and dark Monaco editor themes\n- 💾 **Persistent Results** - Code output is automatically saved with your notes\n- 🔒 **Secure Sandboxed Execution** - Code runs in isolated environments via Piston API on EC2\n- 📋 **Error Handling** - Clear error messages and compilation details for debugging\n\n### 📊 Spreadsheet Support\n\nCreate powerful spreadsheets directly in your notes:\n\n- 📊 **Excel-like editing** - Full spreadsheet functionality with formulas, formatting, and cell styling\n- 🔢 **Formula support** - Use familiar spreadsheet formulas for calculations\n- 📋 **Multiple sheets** - Organize data across multiple worksheets\n- 🎨 **Cell formatting** - Bold, colors, borders, alignment, and number formats\n- 🔒 **Encrypted storage** - Spreadsheet data is encrypted like all your notes\n- 🌐 **Public sharing** - Share spreadsheets publicly with read-only access\n- 🚀 **Quick create** - Use the \"New Spreadsheet\" button to get started\n\n### 📈 Diagram Support\n\n![Create Diagram Demo](https://github.com/typelets/typelets-app/blob/main/assets/diagram-demo.gif)\n\nCreate beautiful diagrams with Mermaid and PlantUML support:\n\n- 📐 **Mermaid Diagrams** - Flowcharts, sequence diagrams, class diagrams, state diagrams, ER diagrams, and more\n- 🎨 **PlantUML Support** - UML diagrams, architecture diagrams, and technical drawings\n- 🚀 **Quick Create** - Use the \"New Diagram\" button or slash command `/diagram`\n- 👁️ **Live Preview** - See your diagram update in real-time as you type\n- 📋 **Diagram Templates** - Start with pre-built templates for common diagram types\n- 💾 **Auto-Save** - Diagrams are automatically saved with your notes\n- 🔄 **Instant Conversion** - Convert existing notes to diagram notes with one click\n\n## 🔒 Security First\n\nTypelets uses industry-standard encryption:\n- **AES-256-GCM** encryption algorithm\n- **250,000 PBKDF2 iterations** for key derivation\n- **Per-note salt** - Each note has a unique encryption key\n- **File encryption** - Attachments are encrypted with the same security as notes\n- **Zero-knowledge architecture** - Server never sees unencrypted data\n\nYour encryption keys are derived from your master password. Even if our database is compromised, your notes and files remain encrypted and unreadable.\n\n### How It Works\n\n1. **Mandatory Setup**: You must set a master password on first use\n2. **Client-Side Encryption**: All encryption happens in your browser\n3. **Encrypted Storage**: Only encrypted data is sent to our servers\n4. **No Recovery**: We cannot recover forgotten passwords (by design)\n\nFor complete security details and technical implementation, see our [**Security Documentation →**](./SECURITY.md)\n\n\n## 🚀 Quick Start\n\n### Prerequisites\n\n- Node.js 20+ (LTS recommended)\n- pnpm 9.15.0+\n- A [Clerk](https://clerk.com) account for authentication\n\n### Installation\n\n```bash\n# Clone the repository\ngit clone https://github.com/typelets/typelets-app.git\ncd typelets\n\n# Install dependencies\npnpm install\n\n# Set up environment variables\ncp .env.example .env.local\n\n# Start the development server\npnpm dev\n```\n\nThe app will be available at `http://localhost:5173`\n\n### Environment Setup\n\nCreate `.env.local` with your configuration:\n\n```env\n# Required - Clerk Authentication\nVITE_CLERK_PUBLISHABLE_KEY=pk_test_your_clerk_key\n\n# API Configuration\nVITE_API_URL=/api\n\n# Proxy Configuration (for development)\n# The proxy will forward /api requests to this target\nVITE_PROXY_TARGET=https://your-api-domain.com\n\n# Optional\nVITE_APP_NAME=Typelets\nVITE_APP_VERSION=0.5.0\n```\n\n**Authentication Setup:**\n- Get your Clerk keys from [dashboard.clerk.com](https://dashboard.clerk.com)\n\n**Code Execution Setup:**\n- Code execution is handled securely by your backend API\n- The backend uses Piston API running on EC2 for isolated code execution\n- No client-side API keys required for security\n\n### Development Proxy\n\nThe development server includes a built-in proxy to avoid CORS issues during local development. The proxy automatically forwards all `/api` requests to your backend server.\n\n#### Using Different Backends\n\n```bash\n# Default: Use dev API server\npnpm dev\n\n# Use local Docker API\nVITE_PROXY_TARGET=http://localhost:8080 pnpm dev\n\n# Use production API (for testing)\nVITE_PROXY_TARGET=https://your-api-domain.com pnpm dev\n```\n\nYou can also create environment-specific files:\n- `.env.local` - Default development\n- `.env.docker` - Local Docker API\n- `.env.production` - Production build\n\n## 🐳 Docker Deployment\n\n### Build and Run Locally\n\n```bash\n# Build Docker image\ndocker build -t typelets-app:latest \\\n  --build-arg VITE_CLERK_PUBLISHABLE_KEY=your_clerk_key \\\n  --build-arg VITE_API_URL=/api \\\n  --build-arg VITE_WEBSOCKET_URL \\\n  .\n\n# Run with your backend\ndocker run -p 80:8080 \\\n  -e BACKEND_URL=https://your-api-domain.com \\\n  typelets-app:latest\n```\n\n### Deploy to AWS ECR\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003eWindows (PowerShell)\u003c/b\u003e\u003c/summary\u003e\n\n```powershell\n# Set your configuration\n$env:AWS_ACCOUNT_ID = (aws sts get-caller-identity --query Account --output text)\n$env:AWS_REGION = \"us-east-1\"\n$env:ECR_REPOSITORY = \"typelets-app\"\n$env:VITE_API_URL = \"/api\"\n$env:VITE_WEBSOCKET_URL = \"https://your-api-domain.com\"\n$env:VITE_CLERK_PUBLISHABLE_KEY = \"pk_live_your_key_here\"\n\n# Create ECR repository (first time only)\naws ecr create-repository `\n  --repository-name $env:ECR_REPOSITORY `\n  --region $env:AWS_REGION `\n  --image-scanning-configuration scanOnPush=true\n\n# Login to ECR\naws ecr get-login-password --region $env:AWS_REGION | docker login --username AWS --password-stdin \"$env:AWS_ACCOUNT_ID.dkr.ecr.$env:AWS_REGION.amazonaws.com\"\n\n# Build the Docker image\ndocker build -t typelets-app:latest `\n  --build-arg VITE_CLERK_PUBLISHABLE_KEY=$env:VITE_CLERK_PUBLISHABLE_KEY `\n  --build-arg VITE_API_URL=$env:VITE_API_URL `\n  --build-arg VITE_WEBSOCKET_URL=$env:VITE_WEBSOCKET_URL `\n  .\n\n# Tag for ECR\ndocker tag typelets-app:latest `\n  \"$env:AWS_ACCOUNT_ID.dkr.ecr.$env:AWS_REGION.amazonaws.com/${env:ECR_REPOSITORY}:latest\"\n\n# Push to ECR\ndocker push \"$env:AWS_ACCOUNT_ID.dkr.ecr.$env:AWS_REGION.amazonaws.com/${env:ECR_REPOSITORY}:latest\"\n```\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003eMac/Linux\u003c/b\u003e\u003c/summary\u003e\n\n```bash\n# Set your configuration\nexport AWS_ACCOUNT_ID=$(aws sts get-caller-identity --query Account --output text)\nexport AWS_REGION=us-east-1\nexport ECR_REPOSITORY=typelets-app\nexport VITE_CLERK_PUBLISHABLE_KEY=pk_live_your_key_here\nexport VITE_API_URL=/api\nexport VITE_WEBSOCKET_URL=wss://your-api-domain.com\n\n# Create ECR repository (first time only)\naws ecr create-repository \\\n  --repository-name $ECR_REPOSITORY \\\n  --region $AWS_REGION \\\n  --image-scanning-configuration scanOnPush=true\n\n# Login to ECR\naws ecr get-login-password --region $AWS_REGION | \\\n  docker login --username AWS --password-stdin $AWS_ACCOUNT_ID.dkr.ecr.$AWS_REGION.amazonaws.com\n\n# Build the Docker image\ndocker build -t typelets-app:latest \\\n  --build-arg VITE_CLERK_PUBLISHABLE_KEY=$VITE_CLERK_PUBLISHABLE_KEY \\\n  --build-arg VITE_API_URL=$VITE_API_URL \\\n  --build-arg VITE_WEBSOCKET_URL=$VITE_WEBSOCKET_URL \\\n  .\n\n# Tag for ECR\ndocker tag typelets-app:latest \\\n  $AWS_ACCOUNT_ID.dkr.ecr.$AWS_REGION.amazonaws.com/$ECR_REPOSITORY:latest\n\n# Push to ECR\ndocker push $AWS_ACCOUNT_ID.dkr.ecr.$AWS_REGION.amazonaws.com/$ECR_REPOSITORY:latest\n```\n\u003c/details\u003e\n\n### Configuration\n\n#### Build Arguments (compile-time)\n\n| Argument | Description | Example |\n|----------|-------------|---------|\n| `VITE_CLERK_PUBLISHABLE_KEY` | Clerk authentication key | `pk_live_xxx` |\n| `VITE_API_URL` | API path for React app (MUST be `/api`) | `/api` |\n| `VITE_WEBSOCKET_URL` | WebSocket URL for real-time sync | `wss://your-api-domain.com` |\n\n#### Runtime Environment Variables\n\n| Variable | Description | Default |\n|----------|-------------|---------|\n| `BACKEND_URL` | Your backend API URL | `https://your-api-domain.com` |\n\n#### Development Environment Variables\n\n| Variable | Description | Default |\n|----------|-------------|---------|\n| `VITE_PROXY_TARGET` | Backend URL for development proxy | `https://your-api-domain.com` |\n| `VITE_API_URL` | API path (keep as `/api`) | `/api` |\n| `VITE_WEBSOCKET_URL` | WebSocket URL for development | `wss://your-api-domain.com` |\n\n### Cloud Deployment Examples\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003eAWS ECS\u003c/b\u003e\u003c/summary\u003e\n\n```json\n{\n  \"containerDefinitions\": [{\n    \"name\": \"typelets-app\",\n    \"image\": \"your-ecr-uri:latest\",\n    \"environment\": [\n      {\n        \"name\": \"BACKEND_URL\",\n        \"value\": \"https://your-api-domain.com\"\n      }\n    ],\n    \"portMappings\": [{\n      \"containerPort\": 8080\n    }]\n  }]\n}\n```\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003eDocker Compose\u003c/b\u003e\u003c/summary\u003e\n\n```yaml\nversion: '3.8'\nservices:\n  typelets-app:\n    image: typelets-app:latest\n    ports:\n      - \"80:8080\"\n    environment:\n      - BACKEND_URL=https://your-api-domain.com\n```\n\u003c/details\u003e\n\n## 🔧 Development\n\n### Available Scripts\n\n```bash\n# Development\npnpm dev          # Start dev server with proxy\npnpm dev:docker   # Start with local Docker API\npnpm build        # Build for production\npnpm preview      # Preview production build\n\n# Code Quality\npnpm lint         # Check for linting issues\npnpm lint:fix     # Auto-fix linting issues\npnpm format       # Format code with Prettier\npnpm type-check   # Check TypeScript types\n\n# Docker\npnpm docker:build # Build Docker image\npnpm docker:run   # Run container locally\n```\n\n### Project Structure\n\n```\ntypelets/\n├── src/\n│   ├── components/     # React components\n│   ├── hooks/          # Custom React hooks\n│   ├── lib/            # Utility functions \u0026 services\n│   │   └── encryption/ # Client-side encryption\n│   ├── types/          # TypeScript definitions\n│   └── App.tsx         # Main App component\n├── worker/             # Cloudflare Worker for SSR (optional)\n│   ├── src/            # Worker source code\n│   └── README.md       # SSR setup instructions\n├── public/             # Static assets\n├── nginx.conf.template # Nginx configuration\n├── vite.config.ts      # Vite configuration with proxy\n├── Dockerfile          # Docker configuration\n└── .env.example        # Environment variables template\n```\n\n## 🚀 Tech Stack\n\n- **Framework:** React 19 with TypeScript\n- **Build Tool:** Vite 7 with development proxy\n- **Styling:** Tailwind CSS v4\n- **Editor:** TipTap with code highlighting\n- **Code Editor:** Monaco Editor (VS Code engine)\n- **Code Execution:** Piston API (self-hosted on EC2) for 15+ programming languages\n- **Authentication:** Clerk\n- **UI Components:** Radix UI\n- **Encryption:** Web Crypto API with AES-256-GCM\n\n## 🤝 Contributing\n\n1. Fork the repository\n2. Create a feature branch (`git checkout -b feature/amazing-feature`)\n3. Commit your changes (`git commit -m 'feat: add amazing feature'`)\n4. Push to the branch (`git push origin feature/amazing-feature`)\n5. Open a Pull Request\n\n## 📝 License\n\nMIT License - see [LICENSE](LICENSE) file for details\n\n## 🙏 Acknowledgments\n\n- [Vite](https://vitejs.dev/)\n- [React](https://react.dev/)\n- [TipTap](https://tiptap.dev/)\n- [Tailwind CSS](https://tailwindcss.com/)\n- [Clerk](https://clerk.com/)\n- [Radix UI](https://www.radix-ui.com/)\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftypelets%2Ftypelets-app","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftypelets%2Ftypelets-app","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftypelets%2Ftypelets-app/lists"}