All projects

Independent product / Engineering case study

Arazi Buldum.

From the first map pin
to the server it runs on.

A land marketplace for web, iOS and Android. I built the entire product independently, owning the interfaces, backend, data model, integrations and the infrastructure behind them.

Product engineeringEİDS integrationSelf-hosted infrastructureProduction ownership

01 / The product

The listing is only
the beginning.

Buying or listing land means connecting location, property details, verification and communication. I brought those steps into a shared web and mobile experience: discover an area, compare listings, verify the applicable requirements and reach the right person.

I owned both sides of that experience: the interfaces people use and the rules that determine what can be published, who can access it and what happens when a service fails.

A marketplace built around location.

I built list and map discovery with filters for price, area, category and location. Visible map bounds inform the search; marker clustering on the web and debounced map updates keep exploration manageable as users move between regions.

Next.js · React Native / Expo · Google Maps

Verification built into the publishing flow.

I integrated EİDS and phone verification into the listing journey, with separate identity and property-authorization flows. The applicable checks run on the server, so publishing rules are enforced beyond the interface.

EİDS · OTP · Server-side validation

Messaging and notification delivery

I connected listing-specific conversations to Realtime updates and push notifications. A PostgreSQL outbox separates recording a notification from delivering it, allowing external delivery failures to be handled independently.

Realtime · PostgreSQL outbox · Expo Push

02 / Publishing & EİDS

A publish button backed
by real business rules.

I split listing publication into a staged workflow. A draft is created first; verification and media are completed before a final server-side check can activate the listing. An attempt key allows an existing draft to be reused when the user retries.

  1. 01

    Create draft

    Save a draft that can be resumed if publishing is interrupted.

  2. 02

    Verify

    Check the phone number and the EİDS requirements for the listing.

  3. 03

    Prepare media

    Add the photos and listing details.

  4. 04

    Validate & publish

    Run the final server checks before activating the listing.

Server-side EİDS integration

I implemented the EİDS service integration on the self-hosted backend, keeping service credentials out of browser and mobile clients and supporting the provider's registered outbound-IP requirements. Identity and property authorization remain separate checks, with rules determined by the listing type.

03 / Architecture

I built the product.
And its foundation.

I set up and operated Supabase on a VPS with Docker Compose, configuring PostgreSQL, Auth, Storage, Realtime and Deno Edge Functions alongside Kong and Caddy. Web and mobile share this backend; common publishing workflows run through the web API.

I managed service configuration, access permissions, deployments and recovery procedures as part of maintaining the application.

Web applicationNext.js / React · Netlify
iOS + AndroidReact Native / Expo · EAS

Shared data services + publishing API

Self-hosted SupabaseVPS · Docker Compose · Kong · Caddy
  • PostgreSQL / RLS
  • Auth
  • Storage
  • Realtime
  • Edge Functions

Server-side integrations & background delivery

EİDSNETGSM / SMSExpo Push
Simplified application architecture. Sentry connects error reporting across mobile, web API and Edge Functions.

04 / Security & recovery

Production ownership
below the application layer.

01

Server access and security

I tightened external service access, configured key-based administrative access and reviewed service configuration as part of hardening the self-hosted environment.

02

Database access controls

I combined PostgreSQL row-level security, authorized RPCs and server-side checks. Public profile and listing fields are separated from private identity and contact data.

03

Encrypted backups and restore tests

I created encrypted database backups and tested restoration in an isolated PostgreSQL environment, checking that the backup could actually be used for recovery.

04

Deployments with a rollback path

I built Edge Function deployment tooling with target checks, dry-run support, a backup of the previous code and a documented rollback procedure.

Protecting conversations when a listing is reassigned

In the corporate workspace pilot, I made sure that reassigning a listing closes the previous conversations without exposing them to the new employee. The new person responsible for the listing starts a separate conversation, and the backend enforces access permissions.

Corporate workspace · Production pilot

05 / Reliability in practice

Tracking notifications
from send to delivery

Tracking push and SMS delivery

I built a PostgreSQL-backed push outbox with row locking to coordinate concurrent workers, bounded retries for selected network failures and receipt checks to track delivery outcomes. Invalid device tokens can be cleaned up as results arrive.

For SMS, I added delivery-status jobs that query NETGSM after a send request is accepted. This makes a later delivery failure visible instead of treating provider acceptance as success.

Tracking errors across mobile and backend services

I integrated Sentry across the Expo app, Next.js APIs and Edge Functions, adding operation context, failure reasons and request identifiers. Selected handled server errors are reported alongside crashes, with sensitive fields filtered.

I also managed web deployments and EAS Build, Submit and OTA releases, using production issues and user feedback to guide subsequent fixes.

06 / The stack

The technologies
I used

Web
Next.js, React, TypeScript, Netlify
Mobile
React Native, Expo, EAS Build / Submit / OTA
Backend & data
Supabase, PostgreSQL, RLS, RPC, Deno Edge Functions
Infrastructure
VPS, Docker Compose, Kong, Caddy
Integrations
EİDS, NETGSM, Google Maps, Expo Push
Operations
Sentry, delivery tracking, encrypted backups, rollback tooling

I built Arazi Buldum’s web and mobile applications, set up its backend and integrations, and managed the server infrastructure. After launch, I continued to handle maintenance and troubleshoot production issues.

From interface to infrastructure

Let's build
the whole thing.