mailbox.ramstudio.pro
Public sourceMVPA custom email inbox that receives messages through a worker, stores them, and displays them on the web.
My contribution highlights
- Connected metadata/text/account relationships in D1 to raw EML and HTML in R2.
- Developed paginated message lists, message details, read/unread, and soft deletion APIs scoped to the account session.
- Built account administration, password resets, suspension/activation, and audit logs with role controls.
Contents · 8 contribution modules
Main workflow
6 stepsDomain emails arrive at a worker, message content is separated from metadata, and an inbox displays them within each user’s session scope.
01Receive domain email
Email arrives at the worker
Sender & email workerCheck the recipient
Worker & account data
02Parse and store messages
Parse email content
PostalMimeSeparate metadata and objects
Cloudflare D1 & R2
03Access the web inbox
Sign in and load the list
User & Hono APIRead and manage status
React frontend
Process details & branches
Email arrives at the workerSender & email worker
The worker receives the raw message and normalises the recipient address before resolving the destination account.
Check the recipientWorker & account data
The destination address is matched to an available account before inbox storage.
Is the destination account recognised?
- Recognised. The message is associated with the recipient account for further processing.
- Not recognised. The message is not placed in another account’s inbox.
Parse email contentPostalMime
The raw message is parsed into text/HTML and message information needed for inbox snippets and details.
Separate metadata and objectsCloudflare D1 & R2
D1 stores metadata, text, timestamps, and account relationships. R2 stores original EML messages and associated HTML.
Sign in and load the listUser & Hono API
The session determines which account can be accessed. The API provides paginated lists and message details for that account.
Read and manage statusReact frontend
Display text or DOMPurify-sanitised HTML. Users can mark messages read/unread and soft-delete them.
The workflow focuses on receiving and reading email: the worker handles incoming messages, while sessions restrict inbox access by account.
About mailbox.ramstudio.pro
mailbox.ramstudio.pro is a web inbox for receiving and reading email on a custom domain. An email worker handles incoming messages, the API provides per-user access, and the frontend displays message lists and details. Metadata is stored in Cloudflare D1, while raw messages and HTML content use R2.
I built the React frontend, Hono backend, email receiver worker, authentication, and admin dashboard. The product focuses on receiving email and managing the inbox.
My contributions
Receiver worker and destination address validation
I built an email worker that normalises recipient addresses and checks destination accounts before processing messages. It reads raw messages and connects them to the correct user so incoming mail is stored in the inbox through account relationships.
MIME parsing and D1/R2 storage
I integrated PostalMime to parse text/HTML content and message information. Original messages are stored as EML in R2, alongside related HTML content. Metadata, snippets, text, received timestamps, and account relationships are stored in D1 to support inbox lists and details.
Inbox APIs and message status changes
I developed paginated list, message detail, read/unread, and soft deletion endpoints. Queries are restricted to the account holding the session. I connected query results and status changes to the frontend so message selection and user actions update the relevant inbox data.
Login, sessions, and password changes
I added login/logout, session cookies, bcrypt password hashes, and hashed session token storage. I also worked on recording and limiting login attempts and password change forms. This connects account identity to permission to use the inbox API.
Account management and admin roles
I built admin processes to create/manage accounts, reset passwords, suspend/activate accounts, and read audit logs. Role checks separate administrative processes from user inbox access so account management operations stay within the appropriate workflows.
Inbox interface and user navigation
I developed the inbox layout, message lists and selection, detail views, password visibility, and admin pages with React Router. I connected pagination, read status, and soft deletion to the API so user actions are reflected in the interface.
Text presentation and HTML sanitisation
I provided plain-text body views and connected HTML views through DOMPurify before rendering. This lets users read message contents while adding a processing layer for HTML arriving in incoming emails.
Migrations, worker configuration, and tests
I prepared D1 schemas/migrations, worker and R2 bindings, Wrangler configuration, and setup/deployment documentation. I also wrote email and session helper tests. Separating the email worker, API, and frontend allows message reception to run independently of the browser displaying the inbox.
Fields & core technologies
Project fields
Core technologies
3 commits in the last 12 months
All branches| Nov | Dec | Jan | Feb | Mar | Apr | May | Jun | Jul | Aug | Sept | Oct | Nov | |||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Sunday | |||||||||||||||||||||||||||||||||||||||||||||||||||||
| Monday | |||||||||||||||||||||||||||||||||||||||||||||||||||||
| Tuesday | |||||||||||||||||||||||||||||||||||||||||||||||||||||
| Wednesday | |||||||||||||||||||||||||||||||||||||||||||||||||||||
| Thursday | |||||||||||||||||||||||||||||||||||||||||||||||||||||
| Friday | |||||||||||||||||||||||||||||||||||||||||||||||||||||
| Saturday |
How it is counted · 1 repo · 1 branch
My authored commits reachable from all remote branches at sync time. Each SHA is counted once, even across branches or forks. Merge commits are excluded. Dates use the author timestamp in Western Indonesia Time (UTC+7), rather than push time. The current streak remains active when the last commit was yesterday and today is still in progress.
This calendar covers commits across all branches. Its totals may differ from GitHub’s contribution calendar, which includes other activity types and follows its own branch rules. This calendar covers only the project you are viewing.
Contribution history
3 of my non-merge commits · All branches · Data as of 3 November 2026.