Evgenii Iulin
Senior Frontend Developer, Product Engineer
Georgia: Remote / Open to relocation
Email: [email protected]
LinkedIn: linkedin.com/in/evgenii-iulin-57217573
GitLab: @attone
GitHub: @alltiptop
Summary
Frontend developer with over 10 years of professional experience, mainly with React, Next.js, and TypeScript. Since 2022, I have also been developing and maintaining Ecomap, a volunteer project with environmental maps and air quality data. As its sole developer, I am responsible for interface design, frontend development, backend services, and infrastructure.
Languages
Russian: Native
English: Upper-Intermediate
My projects
- decloud.cc - a small service for sharing files and messages without installing an app.
- ecomap.ngo - an environmental map with recycling collection points, air quality data, and the option to add locations and comments.
- codex-devpod - a script for running Codex in a devcontainer.
- paranoid-podman - a wrapper for checking Podman launch parameters and limiting container access to the host.
Experience
Ecoparsec NGO - Product Engineer (Volunteer)
Remote: July 2022 - Present Stack: Next.js, TypeScript, Go, GraphQL, Directus, PostGIS, Docker, Linux, MapLibre GL
I built and continue to develop Ecomap, an environmental map with recycling collection points and air quality data. I am its sole developer, responsible for design, frontend development, backend services, and infrastructure. I initially worked on it on weekends as a side project; after my work at Quintegro ended, I began spending most of my working time on it.
Quintegro | Outsourcing - Frontend Developer
Remote: April 2023 - October 2025 Stack: Next.js, React, TypeScript, Sanity, GROQ
I developed client websites with Next.js and built component libraries with designers using Storybook. Projects were handed over between teams, so I paid particular attention to clear code and reusable components.
WayRay | Hardware Startup - Frontend Lead
Moscow / Remote: April 2021 - April 2023 Stack: Next.js, React, TypeScript, GraphQL, Gatsby, Strapi, Docker
I developed the company website, landing pages, and internal services, including an HR system. I decoupled animations and scrolling from React rendering in the old site. I also assigned tasks to external developers and reviewed their work.
Freelance - Frontend Developer
Remote: August 2020 - February 2021 Stack: React, Gatsby, TypeScript, GraphQL, Strapi, Node.js, styled-components, Figma
I built websites from scratch with Strapi and Gatsby, set up image and video optimization, and deployed the projects.
Xometry Europe / Shift GmbH | Startup - Frontend Developer
Remote: October 2019 - July 2020 Stack: React, Redux, TypeScript, styled-components, WordPress
I built the company website with WordPress and helped develop an internal quality control system with React.
Optimax Investments Ltd. | eCommerce - Frontend Developer
Tolyatti: July 2018 - July 2019 Stack: React, Redux, Flow, Jest, redux-saga, Figma
I developed and maintained the React frontend of glassesusa.com in a team with strict testing rules and substantial unit test coverage. I added features and optimized requests and page loading.
Earlier Experience - Frontend Developer / Web Developer
Remote / Samara: August 2014 - June 2018 Stack: Angular, Vue, Vuex, WebRTC, WebSocket, PHP, HTML, CSS, JavaScript
I started with web design and building page layouts, then moved to frontend development with Angular and Vue. I worked for companies and with freelance teams.
Detailed description of experience
Ecoparsec NGO
Remote: July 2022 - Present
Since 2022, I have been working on websites for the environmental NGO Ecoparsec. My largest project is Ecomap.ngo, which I continue to develop and maintain.
Until my work at Quintegro ended in October 2025, I worked on Ecoparsec on weekends alongside my main job. After that, I began spending most of my working time on the project.
Ecomap.ngo
We started the project in 2022 under the name yrvn.am. It was originally a map of Armenia with places to drop off plastic, other recyclable materials, and clothing. Over time, we added air quality data and the ability for users to add locations and comments.
Ecomap is a non-commercial project, and I work on it as a volunteer. I am its only developer. Other team members handle partnerships, the YouTube channel, and content. I have handled the technical work from the start: design, frontend development, backend services, deployment, server configuration, and maintenance. I also make many of the decisions about which features are added to the platform and how they work.
The map and a container request form are embedded in greenyerevan.am. Several other websites use the map through iframes. For these integrations, I built separate pages with embeddable maps and feedback forms.
Map and geographic data
The map contains over 1,000 locations: just over 500 points, with the rest represented as multipolygons, including rivers and forests.
I chose Leaflet for the first version because it was simple and the map had relatively few points. I fetched data from Directus through GraphQL, and clustering ran in the browser.
In 2024, I switched to MapLibre GL. The switch allowed me to use vector layers, set up light and dark themes, and display names in English for an international audience.
As the number of points grew and complex polygons were added, I added a vector tile service in Go. I moved clustering to the server and added tile caching. Checking access permissions required an additional request to Directus, but even with that request, the map worked noticeably faster.
I added a separate search service for finding locations on the map.
Air quality
In 2025, I added an air quality map with sensor readings and city-level estimates. I added a backend in Go that periodically fetches data from OpenAQ and Sensor.Community and stores it in SQLite as a temporary cache. Later, I added data from TUMO air quality sensors. We do not store measurement history yet; we filter out outdated data and invalid readings, including zero sensor values.
In 2026, I added a separate tile service for the air quality map and reworked caching. The map now shows all available sensors from OpenAQ, Sensor.Community, and TUMO.
As of October 2026, the service indexes around 33,000 sensors from external sources, with about 21,000 active after filtering.
I also added a separate city database to quickly identify a city from coordinates and work with air quality data. It contains around 43,000 cities. This removed an unnecessary dependency on Nominatim.
Frontend
I wrote the first version with Next.js 12, React Redux, and styled-components. I chose Next.js for SSR. Later, I upgraded it to version 14 and moved to the App Router, migrated styles from styled-components to Sass, and replaced Redux with Effector in 2026 to optimize the application.
CMS and data access
At first, I used two CMSs: Strapi, which I already knew, for static data such as pages, and Directus for locations. I chose Directus because it worked with PostGIS and had a convenient interface for related data. At the time, its open-source code and lack of restrictions also appealed to me. I used GraphQL with both CMSs.
In autumn 2026, I moved entirely to Directus: it met the project's needs, and maintaining two CMSs was costly. This reduced the number of components I need to update and secure.
I later closed external access to the CMS API. I moved application requests to Next.js API routes with specific operations, keeping direct access to the CMS within the Docker network.
Registration, translations, and content
In 2026, we decided to develop the project for an international audience. I expanded language support to 52 languages for the interface and selected content, using automatic translation. Location descriptions are also automatically translated into English through Google Translate on the backend.
I opened registration and added sign-in through Google and email links - magic links. I wrote a Directus extension for signing in through an email link. Users can add locations and comments; this content goes through an additional check using OpenAI's omni-moderation-latest model.
I set up automatic optimization of uploaded photos so that we would not have to store large original files on the server.
Infrastructure and maintenance
I configure and maintain servers, Docker, GitLab CI/CD, and Cloudflare. I keep dependencies up to date, prioritizing security fixes. I also periodically refactor the code and improve linter rules.
I built a separate service for Open Graph previews of locations: it takes a screenshot of the map with specific styles. The service runs in a container with Playwright, and access to the external network goes through a separate egress layer for network isolation.
I use AI coding agents and adapt the project to support their workflows. The Go services were written mainly with these agents. I review their changes, make architectural decisions, and continue writing code myself, keeping it readable and maintainable.
Ecoparsec.ngo
A small NGO website built with Next.js and Directus. Its small size makes it convenient for trying different approaches.
Quintegro
Remote: April 2023 - October 2025
- I worked on client projects using Next.js in a team with designers, testers, product owners, and other developers. Together with designers, I built component libraries using Storybook. Projects were periodically handed over between teams, so I paid more attention to code clarity and component reuse.
- The backend varied from project to project: some used Sanity with GROQ, while others had a custom backend with GraphQL. I deployed and updated projects on Vercel.
WayRay
Moscow / Remote: April 2021 - April 2023
- I maintained and reworked the company website. My first task was to optimize it: I decoupled animations and scrolling from React rendering in the old version of the site. I built landing pages for projects and internal services, including an HR system.
- I used Strapi as the CMS and accessed it through GraphQL. I built landing pages with Gatsby. I applied my experience from freelance work to automatically optimize videos for different resolutions.
- External developers built some of the landing pages. I assigned tasks to them and reviewed their work.
Freelance
Remote: August 2020 - February 2021
- I built websites with Strapi and Gatsby and handled their maintenance and deployment.
- I set up automatic image and video optimization, including preparing versions for mobile devices. I used FFmpeg to process videos, including adding text overlays.
Xometry Europe
Remote: October 2019 - July 2020
- I developed an internal quality control and sales system with React, a REST API, AG Grid, and styled-components. I also built the company website with WordPress.
Optimax Investments Ltd.
Tolyatti: July 2018 - July 2019
- I worked on the React-based online store glassesusa.com in a large team of developers, designers, and testers. A substantial part of the code was covered by unit tests, and the team followed strict testing rules and a Scrum development process.
- I added new features and optimized requests and page loading. If I remember correctly, First Contentful Paint on some pages decreased from around 5 to 3 seconds.
Earlier Experience
Remote / Samara: August 2014 - June 2018
- I started as a web designer at a small company in Samara that built websites and supplied equipment to restaurants and hotels. I worked with clients and learned to build page layouts and use JavaScript so I could implement my own designs. I helped develop PHP websites, sometimes doing most of the work, and gradually moved towards JavaScript.
- After leaving the company, I started working remotely in a team of developers using Angular 1.4, then moved to Vue.js projects. I continued doing design work, but mainly for interfaces I developed myself.
Other | Personal projects
decloud.cc
A small service for sharing files and messages, built with PeerJS. To connect, you only need to enter a short code or scan a QR code. Besides building the frontend, I also set up a STUN/TURN server.
I made the first version in 2016. Since then, I have rebuilt it every couple of years while keeping the main idea.
codex-devpod
A Bash script for running Codex in a devcontainer and limiting access to the host.
paranoid-podman
A Python wrapper for rootless Podman and Podman Compose. It checks launch parameters, blocks unsafe settings, and prevents mounting potentially dangerous host directories, such as $HOME or .ssh. It also restricts changes to mount parameters from inside the container. It does not protect against vulnerabilities in Podman itself that allow code to escape container isolation.
I made it for personal use, with my work projects, PostgreSQL containers, devcontainers, and codex-devpod in mind.
paranoid-podman and codex-devpod were written mostly with the help of Codex.
family proxy
I maintain a home proxy service using existing solutions and my own tools. I built a website where users can sign in through a one-time link sent by email, read the documentation, and view their token. The same features are available through a Telegram bot.
I maintain several connected servers with varying load and automatic selection of exit nodes.