Context.
This is my current job at Etecnic, where I joined as an intern and stayed on a permanent contract. The product is a multi-tenant SaaS that energy operators and airports use to manage EV charging.
I take features end to end: REST endpoints with role-based permissions and RSpec tests, per-domain branding and, above all, invoicing. I do not publish company code or material: this page only covers my part.
The problem.
Energy operators and airports in several countries need legally valid invoices in their own language and with their own branding.
What I decided, and why.
01
Invoicing in nine languages
- what
- Every invoice string comes from translations rather than hard-coded text, so each customer receives it in their own language.
02
PDFs built from HTML and CSS templates
- what
- I migrated invoice PDF generation to HTML and CSS templates, with their own step in the CI pipeline.
03
Per-domain branding
- what
- Each customer sees the app and its documents with their own brand, depending on the domain they use.
Result.
- Invoices in each customer’s language and brand, in production.
- Role-based endpoints covered by RSpec tests.
What I learned.
- How a real development and production environment works: Git flow, branches, sprints and reviewed merge requests.
- How to read a problem in production, find its cause and fix it.
- How to keep learning on my own inside a team: sometimes you have to find your own exact way of doing things.