I am still building a free email service that respects privacy and prevents profiling on 103mail.com. I started this effort in 2024 and have been building slowly since (because work and life happens). I have reached a new milestone and it is thanks to SDD (Spec Driven Development with SpecKit) and AI (VSCode + Copilot + Claude Sonnet 4.5) that I have made good progress lately. In this post I’ll explain to you a bit about my way of working and about the progress.
Spec Driven Development with SpecKit
So I went into my project folder and I typed:
@speckit.specify Build a messaging system that looks like E-mail. It does not actually send email out, only notifications. It does not allow forwarding threads, only subscribe to the thread. Users that are not in the system receive an email that they have become a member and that a message is waiting for them.
And the “001-internal-messaging/spec.md” file was created and it also created a “001-internal-messaging/data-model.md” file. The file was full of great specification that would have taken me hours to write. I then asked it to split the spec for “001-internal-messaging” from the calendaring functionality “002-calendaring” and even asked it to come up with “003-real-time-chat” including a data model. Since it already had the proper context of the other features it was doing real magic!
Here is an excerpt from the constitution.md file it generated for the project:
Core Principles
I. Content Privacy & Non-Forwarding
Message content never leaves the system via email. Threads cannot be forwarded. External recipients onboard via notification-only emails and secure links. Quoting creates new independent threads with no backlink.
II. Immutable Message History
Messages are append-only; users cannot delete or rewrite sent content. Compliance retention purges are controlled, logged, and never silently mutate historical data.
III. Projection-Based Access Control
Canonical objects (g_thread, g_message, g_attachment, g_subscription) remain immutable; per-user projections (thread, message, attachment) carry read/deleted state. All visibility, search, and permissions derive from projections + subscription membership. No direct edits of canonical content by end users.
The insights.. amazing aren’t they?
Using VSCode + Copilot + Claude Sonnet 4.5
Next I started to tell Claude in Agent mode to implement the missing functionality of the Calendar API and also create a Chat API from scratch. I asked it to generate OpenAPI 3 documentation for the API and it did so much in so little time. I hardly needed to steer it as it had so much context. Sometimes I had to start a new chat in order to avoid summarizing the context.
I made 10 commits over the past 6 hours (after dinner), totaling ~3,800 lines added and ~440 lines removed.
PHP files modified:
- ChatApi.php - 307 lines changed (refactoring)
- ChatClient.php - 446 new lines (new file)
- ChatApiTest.php - 498 new lines (new test file)
- CalendarApiTest.php - 247 new lines (new test file)
- MailApiTest.php - 160 lines changed
- PostmarkApiTest.php - 4 lines changed
- CalendarApi.php - 295 new lines
- CalendarClient.php - 145 lines added
- AuditLog.php - 60 new lines
Other files modified:
- YAML: OpenAPI spec files (~2500 lines, 50% new)
- MarkDown: Specification documents (~1300 lines, 75% new)
- SQL: Test data + structure (~800 lines, 25% new)
This would have not been possible in one evening without AI. Maybe not everything is perfect, but it wouldn’t have been if I did it manually either.
Switching to Postmark
Initially, I was planning to run my own mail server using Debian with Postfix for handling both incoming and outgoing email. However, after considering the complexity involved in managing email delivery, spam filtering, DKIM/SPF/DMARC configuration, and maintaining good sender reputation, I decided to switch to Postmark for now. This allows me to focus on building the main features of 103mail.com. Postmark provides APIs for both sending and receiving email. Postmark being commercial and from the US doesn’t really matter as we use email only for notifications anyway. Also we can always switch to another service later (if required).
Where we stand now
Well, I implemented the calendar and chat data models and their APIs. I still need to implement calendar and chat in the web client on 103mail.com. You can see the API I got so far here:
It’s going to be a blast building this further with my newfound AI-powered toolkit. If you’re excited about this project and want to join the adventure, reach out: I’d love to have you on board.
Enjoy programming!
Links
- Speckit.org - Build High-Quality Software Faster with Spec Kit
- Github.blog - Copilot coding agent now supports AGENTS.md
- PostmarkApp.com - Inbound Email Processing
- TQdev.com - 103mail.com - The plan (2024-04-11)
- TQdev.com - 103mail.com - Update 1 (2024-04-12)
- TQdev.com - 103mail.com - Update 2 (2025-03-30)
- TQdev.com - 103mail.com - Update 3 (2025-11-18)