4 ms·
Show HN: Grap – A self-hostable temporary email service
It's a simple, self-hostable system for managing temporary email addresses, designed specifically for developers and automation workflows.
I built this primarily for my own use to be able to run full integration tests for projects that rely on email confirmation etc., but I'd love to get feedback from the HN community. What features would make this more useful for your workflows?
Key features:
- REST API for generating addresses and retrieving emails
- Web interface for manual management
- Lightweight SMTP server
- Docker-ready for easy deployment
The entire backend is written in TypeScript and uses Fastify, Knex, and Objection.js. The frontend is intentionally minimal, using Liquid templates and vanilla JavaScript to keep things fast and simple.
The project is MIT licensed, so feel free to fork and modify as needed. There's also a live demo at https://grap.email https://grap.email if you want to try it out before deploying your own instance.
- mdaniel 2y agoI would really enjoy a "compared to" section in the readme, showing why one should choose this project over its competition. If it's just a "because I wanted to" situation, then the readme section would be very short but still helpful For my curiosity, why limit the number of email addresses? https://github.com/ivstiv/grap/blob/v1.1.2/server/src/database/migrations/20220705191659_table_user_settings.ts#L6 https://github.com/ivstiv/grap/blob/v1.1.2/server/src/databa... and, merely for your consideration: since you are already going to the trouble of booting up a regex to check it <https://github.com/ivstiv/grap/blob/v1.1.2/server/src/routes/api-v1.ts#L14 https://github.com/ivstiv/grap/blob/v1.1.2/server/src/routes...>, go ahead and extract it simultaneously, avoiding the pitfalls of .split() > const ma = /^Bearer\s([a-z0-9]+)$/.exec("Bearer alphabeta"); > ma[1] 'alphabeta' > /^Bearer\s([a-z0-9]+)$/.exec("Bearer hello world"); null
- ivstiv 2y agoGood shout on the getting of the token! The limit of the emails was added mostly, so I can restrict my demo on grap.email, so it is less convenient for abuse. It is a configurable system setting. As for the comparison, I mostly started this because I couldn't find a self hostable solution at the time and did not like the pricing models of existing services. They were an overkill for my needs. That being said I wouldn't say I can compete on features with any of the established solutions, they are much more sophisticated. I just needed something simple, so I coded it.