{"id":33278805,"url":"https://github.com/bhatvinay7/notetaker","last_synced_at":"2026-04-16T10:04:00.056Z","repository":{"id":322793694,"uuid":"1090910856","full_name":"bhatvinay7/notetaker","owner":"bhatvinay7","description":"Notetaker is a modern web application designed to help users create, organize, and manage their notes efficiently. It offers a clean and intuitive interface where users can write, edit, and search notes seamlessly. Each note is auto-saved, timestamped, and organized under sessions for better categorization.","archived":false,"fork":false,"pushed_at":"2025-11-13T17:10:43.000Z","size":337,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"dev","last_synced_at":"2025-11-13T17:24:23.706Z","etag":null,"topics":["docker","honojs","nextjs","nodejs","postgresql","redis-cache"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/bhatvinay7.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"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-11-06T09:56:56.000Z","updated_at":"2025-11-13T17:10:46.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/bhatvinay7/notetaker","commit_stats":null,"previous_names":["bhatvinay7/notetaker"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/bhatvinay7/notetaker","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bhatvinay7%2Fnotetaker","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bhatvinay7%2Fnotetaker/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bhatvinay7%2Fnotetaker/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bhatvinay7%2Fnotetaker/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bhatvinay7","download_url":"https://codeload.github.com/bhatvinay7/notetaker/tar.gz/refs/heads/dev","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bhatvinay7%2Fnotetaker/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31880884,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-16T09:23:21.276Z","status":"ssl_error","status_checked_at":"2026-04-16T09:23:15.028Z","response_time":69,"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":["docker","honojs","nextjs","nodejs","postgresql","redis-cache"],"created_at":"2025-11-17T10:00:45.690Z","updated_at":"2026-04-16T10:04:00.041Z","avatar_url":"https://github.com/bhatvinay7.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Notetaker - Turborepo Monorepo\n\nNotetaker is a modern web application designed to help users create, organize, and manage their notes efficiently. Built with Turborepo, it offers a clean and intuitive interface where users can write, edit, and search notes seamlessly. Each note is auto-saved, timestamped, and organized under sessions for better categorization.\n\n\nThis Turborepo includes the following packages and apps:\n\n### Apps\n- **`web`**: Next.js frontend application (runs on port 3000)\n- **`http-server`**: Backend API server (runs on port 3002)\n\n### Packages\n- **`@repo/ui`**: Shared React component library\n- **`@repo/eslint-config`**: ESLint configurations (includes `eslint-config-next` and `eslint-config-prettier`)\n- **`@repo/typescript-config`**: Shared `tsconfig.json` used throughout the monorepo\n\n### Tools\n- [TypeScript](https://www.typescriptlang.org/) for static type checking\n- [ESLint](https://eslint.org/) for code linting\n- [Prettier](https://prettier.io) for code formatting\n- [Docker](https://www.docker.com/) for containerization\n\n## 🚀 Getting Started\n\n### Prerequisites\n\n- Node.js 18+ and npm/yarn/pnpm\n- Docker and Docker Compose (for containerized setup)\n- Git\n\n### Clone the Repository\n\n```bash\ngit clone https://github.com/bhatvinay7/notetaker.git\ncd notetaker\n```\n\n## 🐳 Docker Setup (Recommended)\n\nThe easiest way to run the application locally is using Docker Compose.\n\n### Step 1: Create Environment Files\n\nCreate `.env` files for each application:\n\n#### `apps/http-server/.env`\n\n```env\n# API Configuration\nAPI_KEY=your_api_key_here\n\n# Frontend URL\nNEXT_PUBLIC_FRONTEND_URL=http://localhost:3000\n\n# Database Configuration\nDATABASE_URL=postgresql://user:password@postgres:5432/notetaker\n\n# Google OAuth Configuration\nGOOGLE_CLIENT_ID=your_google_client_id\nGOOGLE_CLIENT_SECRET=your_google_client_secret\nGOOGLE_REDIRECT_URI=http://localhost:3002/auth/google/callback\n\n# Security Keys\nSECRET_KEY=your_secret_key_here\nACCESS_KEY=your_access_key_here\n```\n\n#### `apps/web/.env`\n\n```env\n# Frontend Configuration\nNEXT_PUBLIC_FRONTEND_URL=http://localhost:3000\nNEXT_PUBLIC_BACKEND_URL=http://localhost:3002\n\n# Security Key\nSECRET_KEY=your_secret_key_here\n```\n\n### Step 2: Create Docker Compose File\n\nCreate a `docker-compose.yml` file in the root directory:\n\n```yaml\nversion: '3.8'\n\nservices:\n  postgres:\n    image: postgres:15-alpine\n    container_name: notetaker-postgres\n    environment:\n      POSTGRES_USER: user\n      POSTGRES_PASSWORD: password\n      POSTGRES_DB: notetaker\n    ports:\n      - \"5432:5432\"\n    volumes:\n      - postgres_data:/var/lib/postgresql/data\n    healthcheck:\n      test: [\"CMD-SHELL\", \"pg_isready -U user\"]\n      interval: 10s\n      timeout: 5s\n      retries: 5\n\n  http-server:\n    build:\n      context: .\n      dockerfile: apps/http-server/Dockerfile\n    container_name: notetaker-api\n    env_file:\n      - apps/http-server/.env\n    ports:\n      - \"3002:3002\"\n    depends_on:\n      postgres:\n        condition: service_healthy\n    volumes:\n      - ./apps/http-server:/app/apps/http-server\n      - /app/node_modules\n      - /app/apps/http-server/node_modules\n\n  web:\n    build:\n      context: .\n      dockerfile: apps/web/Dockerfile\n    container_name: notetaker-web\n    env_file:\n      - apps/web/.env\n    ports:\n      - \"3000:3000\"\n    depends_on:\n      - http-server\n    volumes:\n      - ./apps/web:/app/apps/web\n      - /app/node_modules\n      - /app/apps/web/node_modules\n\nvolumes:\n  postgres_data:\n```\n\n### Step 3: Create Dockerfiles\n\n#### `apps/http-server/Dockerfile`\n\n```dockerfile\nFROM node:18-alpine AS base\n\nFROM base AS builder\nWORKDIR /app\nRUN npm install -g turbo\nCOPY . .\nRUN turbo prune http-server --docker\n\nFROM base AS installer\nWORKDIR /app\nCOPY .gitignore .gitignore\nCOPY --from=builder /app/out/json/ .\nCOPY --from=builder /app/out/package-lock.json ./package-lock.json\nRUN npm install\n\nCOPY --from=builder /app/out/full/ .\nRUN npm run build --filter=http-server\n\nFROM base AS runner\nWORKDIR /app\nRUN addgroup --system --gid 1001 nodejs\nRUN adduser --system --uid 1001 nodejs\nUSER nodejs\n\nCOPY --from=installer /app/apps/http-server/package.json .\nCOPY --from=installer --chown=nodejs:nodejs /app/apps/http-server/dist ./dist\nCOPY --from=installer --chown=nodejs:nodejs /app/node_modules ./node_modules\n\nEXPOSE 3002\nCMD [\"node\", \"dist/index.js\"]\n```\n\n#### `apps/web/Dockerfile`\n\n```dockerfile\nFROM node:18-alpine AS base\n\nFROM base AS builder\nWORKDIR /app\nRUN npm install -g turbo\nCOPY . .\nRUN turbo prune web --docker\n\nFROM base AS installer\nWORKDIR /app\nCOPY .gitignore .gitignore\nCOPY --from=builder /app/out/json/ .\nCOPY --from=builder /app/out/package-lock.json ./package-lock.json\nRUN npm install\n\nCOPY --from=builder /app/out/full/ .\nRUN npm run build --filter=web\n\nFROM base AS runner\nWORKDIR /app\nRUN addgroup --system --gid 1001 nodejs\nRUN adduser --system --uid 1001 nextjs\nUSER nextjs\n\nCOPY --from=installer /app/apps/web/next.config.js .\nCOPY --from=installer /app/apps/web/package.json .\nCOPY --from=installer --chown=nextjs:nodejs /app/apps/web/.next/standalone ./\nCOPY --from=installer --chown=nextjs:nodejs /app/apps/web/.next/static ./apps/web/.next/static\nCOPY --from=installer --chown=nextjs:nodejs /app/apps/web/public ./apps/web/public\n\nEXPOSE 3000\nENV PORT 3000\nCMD [\"node\", \"apps/web/server.js\"]\n```\n\n### Step 4: Run with Docker Compose\n\n```bash\n# Start all services\ndocker-compose up -d\n\n# View logs\ndocker-compose logs -f\n\n# Stop all services\ndocker-compose down\n\n# Stop and remove volumes (database data)\ndocker-compose down -v\n```\n\n### Step 5: Access the Application\n\n- **Frontend**: http://localhost:3000\n- **Backend API**: http://localhost:3002\n- **PostgreSQL**: localhost:5432\n\n## 💻 Local Development Setup (Without Docker)\n\n### Step 1: Install Dependencies\n\n```bash\npnpm install\n```\n\n### Step 2: Set Up Environment Variables\n\nCreate the same `.env` files as described in the Docker setup section, but update the database URL:\n\n```env\nDATABASE_URL=postgresql://user:password@localhost:5432/notetaker\n```\n\n### Step 3: Set Up PostgreSQL Database\n\nInstall and run PostgreSQL locally, then create the database:\n\n```bash\ncreatedb notetaker\n```\n\n### Step 4: Run Database Migrations\n\n```bash\ncd apps/http-server\npnpm run migrate\n```\n\n### Step 5: Start Development Servers\n\nRun all apps in development mode:\n\n```bash\n# From the root directory\npnpm run dev\n```\n\nOr run specific apps:\n\n```bash\n# Run only the web app\npnpm run dev --filter=web\n\n# Run only the http-server\npnpm run dev --filter=http-server\n```\n\n## 🔧 Configuration\n\n### Google OAuth Setup\n\n1. Go to [Google Cloud Console](https://console.cloud.google.com/)\n2. Create a new project or select an existing one\n3. Enable Google+ API\n4. Create OAuth 2.0 credentials\n5. Add authorized redirect URIs:\n   - `http://localhost:3002/auth/google/callback` (development)\n6. Copy the Client ID and Client Secret to your `.env` file\n\n### Environment Variables Explained\n\n#### HTTP Server (Backend)\n\n| Variable | Description | Example |\n|----------|-------------|---------|\n| `API_KEY` | API key for external services | `your_api_key` |\n| `NEXT_PUBLIC_FRONTEND_URL` | Frontend application URL | `http://localhost:3000` |\n| `DATABASE_URL` | PostgreSQL connection string | `postgresql://user:password@localhost:5432/notetaker` |\n| `GOOGLE_CLIENT_ID` | Google OAuth Client ID | From Google Console |\n| `GOOGLE_CLIENT_SECRET` | Google OAuth Client Secret | From Google Console |\n| `GOOGLE_REDIRECT_URI` | OAuth callback URL | `http://localhost:3002/auth/google/callback` |\n| `SECRET_KEY` | Secret key for JWT/session | Random secure string |\n| `ACCESS_KEY` | Access key for authentication | Random secure string |\n\n#### Web Server (Frontend)\n\n| Variable | Description | Example |\n|----------|-------------|---------|\n| `NEXT_PUBLIC_FRONTEND_URL` | Frontend URL (public) | `http://localhost:3000` |\n| `NEXT_PUBLIC_BACKEND_URL` | Backend API URL (public) | `http://localhost:3002` |\n| `SECRET_KEY` | Secret key matching backend | Same as backend |\n\n## 📝 Available Scripts\n\n### Build\n\nBuild all apps and packages:\n\n```bash\npnpm run build\n```\n\nBuild specific app:\n\n```bash\npnpm run build --filter=web\npnpm run build --filter=http-server\n```\n\n### Development\n\nStart all apps in dev mode:\n\n```bash\npnpm run dev\n```\n\nStart specific app:\n\n```bash\npnpm run dev --filter=web\n```\n\n### Linting\n\n```bash\npnpm run lint\n```\n\n### Format Code\n\n```bash\npnpm run format\n```\n\n### Type Checking\n\n```bash\npnpm run type-check\n```\n\n## 🏗️ Project Structure\n\n```\nnotetaker/\n├── apps/\n│   ├── web/                 # Next.js frontend\n│   │   ├── src/\n│   │   ├── public/\n│   │   ├── .env\n│   │   ├── Dockerfile\n│   │   └── package.json\n│   └── http-server/         # Backend API\n│       ├── src/\n│       ├── .env\n│       ├── Dockerfile\n│       └── package.json\n├── packages/\n│   ├── ui/                  # Shared UI components\n│   ├── eslint-config/       # Shared ESLint config\n│   └── typescript-config/   # Shared TypeScript config\n├── docker-compose.yml\n├── turbo.json\n└── package.json\n```\n\n## 🔍 Key Features\n\n- **Session-based Note Organization**: Notes are organized under sessions for better categorization\n- **Auto-save**: All notes are automatically saved as you type\n- **Timestamps**: Each note includes creation and modification timestamps\n- **Search Functionality**: Quickly find notes with built-in search\n- **Google OAuth**: Secure authentication using Google accounts\n- **Responsive Design**: Works seamlessly on desktop and mobile devices\n\n## 🛠️ Troubleshooting\n\n### Docker Issues\n\n**Problem**: Containers won't start\n```bash\n# Check logs\ndocker-compose logs\n\n# Rebuild containers\ndocker-compose up --build\n```\n\n**Problem**: Database connection errors\n```bash\n# Check if PostgreSQL is ready\ndocker-compose ps\n\n# Restart PostgreSQL\ndocker-compose restart postgres\n```\n\n### Port Conflicts\n\nIf ports 3000, 3002, or 5432 are already in use, modify the port mappings in `docker-compose.yml`:\n\n```yaml\nports:\n  - \"3001:3000\"  # Change host port\n```\n\n### Environment Variable Issues\n\nEnsure all required environment variables are set. Check with:\n\n```bash\ndocker-compose config\n```\n\n## 📚 Learn More\n\n- [Turborepo Documentation](https://turborepo.com/docs)\n- [Next.js Documentation](https://nextjs.org/docs)\n- [Docker Documentation](https://docs.docker.com/)\n- [PostgreSQL Documentation](https://www.postgresql.org/docs/)\n\n## 🤝 Contributing\n\n1. Fork the repository\n2. Create your feature branch (`git checkout -b feature/amazing-feature`)\n3. Commit your changes (`git commit -m 'Add some amazing feature'`)\n4. Push to the branch (`git push origin feature/amazing-feature`)\n5. Open a Pull Request\n\n## 📄 License\n\nThis project is licensed under the MIT License.\n\n## 👥 Support\n\nFor issues and questions:\n- Open an issue on [GitHub](https://github.com/bhatvinay7/notetaker/issues)\n- Check existing documentation\n- Review closed issues for solutions\n\n---\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbhatvinay7%2Fnotetaker","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbhatvinay7%2Fnotetaker","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbhatvinay7%2Fnotetaker/lists"}