{"id":29133136,"url":"https://github.com/gnuheike/calmmail-typescript-nx-nestjs-angular","last_synced_at":"2026-05-06T11:30:53.513Z","repository":{"id":298587812,"uuid":"998115165","full_name":"gnuheike/CalmMail-Typescript-NX-NestJS-Angular","owner":"gnuheike","description":"CalmMail is a lightweight, cross-platform email client application that provides essential email functionality across desktop and mobile devices. The application focuses on simplicity, reliability, and seamless synchronization while maintaining a consistent user experience across all platforms.","archived":false,"fork":false,"pushed_at":"2025-06-28T20:52:13.000Z","size":735,"stargazers_count":0,"open_issues_count":6,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-06-28T21:30:52.292Z","etag":null,"topics":["angular","clean-architecture","monorepo","nestjs","nx","typescript"],"latest_commit_sha":null,"homepage":"","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/gnuheike.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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}},"created_at":"2025-06-07T22:26:21.000Z","updated_at":"2025-06-28T20:52:17.000Z","dependencies_parsed_at":"2025-06-28T21:41:46.091Z","dependency_job_id":null,"html_url":"https://github.com/gnuheike/CalmMail-Typescript-NX-NestJS-Angular","commit_stats":null,"previous_names":["gnuheike/calmmail","gnuheike/calmmail-typescript-nx-nestjs-angular"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/gnuheike/CalmMail-Typescript-NX-NestJS-Angular","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gnuheike%2FCalmMail-Typescript-NX-NestJS-Angular","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gnuheike%2FCalmMail-Typescript-NX-NestJS-Angular/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gnuheike%2FCalmMail-Typescript-NX-NestJS-Angular/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gnuheike%2FCalmMail-Typescript-NX-NestJS-Angular/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/gnuheike","download_url":"https://codeload.github.com/gnuheike/CalmMail-Typescript-NX-NestJS-Angular/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gnuheike%2FCalmMail-Typescript-NX-NestJS-Angular/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":262727708,"owners_count":23354665,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["angular","clean-architecture","monorepo","nestjs","nx","typescript"],"created_at":"2025-06-30T07:02:02.089Z","updated_at":"2026-05-06T11:30:53.453Z","avatar_url":"https://github.com/gnuheike.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Calm Mail\n\n![Coverage](https://img.shields.io/endpoint?url=https://gist.githubusercontent.com/gnuheike/5e5f0185a79b23d8609188502a8ce8af/raw/coverage-badge.json)\n\n![Calm Mail](https://gnuheike.top/clouds.jpg)\n\nCalmMail is a lightweight, cross-platform email client application that provides essential email functionality across\ndesktop and mobile devices. The application focuses on simplicity, reliability, and seamless synchronization while\nmaintaining a consistent user experience across all platforms.\n\n## Features\n\n### Email Management\n\n- **Inbox Management**: View, read, and organize incoming emails\n- **Email Composition**: Create, edit, and send emails with basic formatting\n- **Draft System**: Save work-in-progress emails for later completion\n- **Email Organization**: Move emails between inbox, sent, and trash folders\n- **Read Status**: Mark emails as read/unread for better tracking\n\n### Account Management\n\n- **Multi-Account Support**: Add and manage multiple email accounts (IMAP/POP3)\n- **Authentication**: Secure login with standard email protocols\n- **Account Settings**: Configure and modify email account parameters\n\n### Synchronization\n\n- **Cross-Device Sync**: Keep emails synchronized across all devices\n- **Offline Mode**: Basic offline functionality with sync when connected\n- **Real-time Updates**: Automatic email fetching and status updates\n\n### User Interface\n\n- **Responsive Design**: Optimized layouts for desktop, tablet, and mobile\n- **Dark/Light Themes**: User preference-based theming\n- **Intuitive Navigation**: Simple folder structure and email threading\n\n## Technical Architecture\n\nCalmMail is built using an Nx monorepo structure with the following components:\n\n### Project Structure\n\n```\ncalm-mail/\n├── apps/\n│   ├── web/              # Web app (Angular + Ionic)\n│   └── server/           # NestJS backend\n├── libs/\n│   ├── shared/\n│   │   ├── contract/     # Contract between frontend and backend\n│   │   └── domain/       # Domain models and business logic\n│   ├── frontend/\n│   │   ├── adapter/      # Adapters for external services\n│   │   ├── application/  # Application logic and state management\n│   │   ├── domain/       # Domain models and business logic\n│   │   ├── shared/       # Shared utilities and components\n│   │   └── ui/           # UI components\n│   ├── backend/\n│   │   ├── domain/       # Backend domain models\n│   │   └── use-case-in-memory-adapter/ # In-memory adapters for use cases\n│   └── permanent-storage/ # Persistent storage implementation\n│       ├── Application/  # Application layer for storage\n│       ├── Domain/       # Domain models for storage\n│       └── Infrastructure/ # Infrastructure implementation for storage\n```\n\n### Technology Stack\n\n- **Frontend**: Angular 20 + Ionic 8\n- **Desktop**: Electron 36\n- **Mobile**: Capacitor 7\n- **Backend**: NestJS 11 (Clean Architecture + DDD)\n- **Monorepo**: Nx Workspace 21\n- **Storage**: @ionic/storage-angular\n- **API Communication**: ts-rest for type-safe API communication\n\n### Architecture Highlights\n\n- **Clean Architecture**: Separation of concerns with domain-driven design\n- **Cross-Platform**: Single codebase for web, desktop, and mobile\n- **Offline-First**: Local storage with synchronization capabilities\n- **Type Safety**: End-to-end type safety from database to UI\n\n## Getting Started\n\n### Prerequisites\n\n- Node.js (v18 or later)\n- Bun package manager (recommended)\n- Nx CLI (`npm install -g nx` or `bun install -g nx`)\n\n### Installation\n\n1. Clone the repository:\n\n```sh\ngit clone https://github.com/your-username/calm-mail.git\ncd calm-mail\n```\n\n2. Install dependencies:\n\n```sh\n# Using Bun (recommended)\nbun install\n\n# Or using npm\nnpm install\n```\n\n3. Build the project:\n\n```sh\n# Build all projects\nnx run-many --target=build --all --parallel\n```\n\n### Running the Application\n\n#### Development Mode\n\nTo run the web application in development mode:\n\n```sh\n# Using npm scripts\nnpm run web:serve\n\n# Or using nx directly\nnx serve web\n```\n\nTo run the server in development mode:\n\n```sh\n# Using npm scripts\nnpm run server:serve\n\n# Or using nx directly\nnx serve server\n```\n\n#### Production Build\n\nTo create a production build:\n\n```sh\nnx build web --configuration=production\nnx build server --configuration=production\n```\n\n### Testing\n\nRun all tests:\n\n```sh\n# Run all tests with coverage\nnpm run ci:test\n\n# Generate merged coverage report\nnpm run ci:test-coverage-merge\nnpm run ci:generate-coverage-report\n```\n\n### Troubleshooting\n\nIf you encounter build issues:\n\n```sh\n# Reset Nx cache\nnpm run reset\n# or\nbun reset\n```\n\n## Development Status\n\nCalmMail is currently in Phase 1 (MVP) with the following focus:\n\n- Basic email reading and sending\n- Single account support\n- Web-first development\n\nFuture phases will include:\n\n- Multi-platform support (mobile apps)\n- Multi-account management\n- Cross-device synchronization\n- Enhanced features (advanced search, filtering, etc.)\n\n## Contributing\n\nContributions are welcome! Please feel free to submit a Pull Request.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgnuheike%2Fcalmmail-typescript-nx-nestjs-angular","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgnuheike%2Fcalmmail-typescript-nx-nestjs-angular","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgnuheike%2Fcalmmail-typescript-nx-nestjs-angular/lists"}