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


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.

More about my work at Ecoparsec

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

WayRay

Moscow / Remote: April 2021 - April 2023

Freelance

Remote: August 2020 - February 2021

Xometry Europe

Remote: October 2019 - July 2020

Optimax Investments Ltd.

Tolyatti: July 2018 - July 2019

Earlier Experience

Remote / Samara: August 2014 - June 2018

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.