About
Hi! I’m Alessandro, a frontend engineer currently working at IBM who enjoys the intersection of design, product thinking, and engineering. I like shaping how a product looks and works, collaborating with others on architectural decisions, and choosing the right stack for the job. I care about writing clean, well-structured code that’s technically sound and maintainable.
Before moving into software development, I worked as a documentary photographer. Feel free to take a look at one of my projects
.
When offline, I’m usually at the gym, working on my calisthenics.
Experience
2024 – Present
Frontend Engineer · IBM, Italy
Clients
State Accounting Office
AI platform that searches legislation, drafts reports and processes documents. Winner of the Italian Digital Agenda Award 2025.
Italian tax courts
Case-management app with ~2,000 users, shipped as an embeddable micro-frontend.
National Customs Agency
Chat interface for an AI assistant, with responses streamed over WebSocket.
BPER Bank
Bug fixes and support, plus new features and tests on the bank’s design system in Storybook.
2023 – 2024
Frontend Developer · Freelance, U.K.
2017 – 2023
Documentary Photographer · Freelance, U.K.
Projects
Team planner
A sprint board for planning and tracking work. Move and reorder items with a pointer or keyboard, with changes saved between visits. If someone changes a card while you are working, the board refreshes rather than overwriting their changes.
- Next.js
- TypeScript
- Tailwind CSS
- PostgreSQL
- Supabase
Bulk operations dashboard
Sends reminders for a batch of invoices and deals with the ones that fail: temporary failures can be retried on their own, and reminders can be undone. Filters, sorting and pages live in the URL, so a view survives a reload and can be shared. A built-in panel simulates the server conditions.
- React
- TypeScript
- TanStack Query
- TanStack Router
- MSW
Multiselect wrapper component
An alternative multi-select built on react-select. Where react-select applies every click, this one keeps the choices as a draft until OK, so a filter fetches results once. Fully accessible, it applies values on one row as tags, with +N for the rest.
- React
- TypeScript
- Vitest
- Playwright