Skip to content
Bagtyyarfull-stack engineer

Build Log

Carberk

Sign-in code logs redacted; Play submission decisions recorded

Sign-in log lines now show only the last four digits of the phone number, and Google Play publishing from the command line was set up.

Carberk

Store release wired to the existing Play app as version 2.0.0

The new app ships as version 2.0.0, an update to the existing Play listing, with a build check that refuses a mismatched package name.

Carberk

EXIF and GPS stripped from stored images

Listing photo originals carrying metadata or an orientation tag are re-encoded upright without it (within the 5 MB cap) before variants are built, and chat images are re-encoded the same way before another user can load them. Chat only accepts images uploaded for that conversation.

Carberk

Privacy: credentials and search terms kept out of logs

pino-http no longer logs Authorization, Cookie, or API-key headers, and query strings (including search terms) stay out of the request log. Purge deletes the user's sign-in code records and clears contact phones on kept listings, a job sweeps code records older than 30 days, and Android backup is disabled.

Carberk

Play Console submission pack prepared

Store listing copy in RU, TK, and EN, Data safety answers and permissions cited to the code, app content answers, a reviewer access template, and the founder's Console checklist. That is the full submission pack for the Play release.

Carberk

Account deletion made atomic; Turkmen copy and profile fixes

Deleting an account now archives the user's listings in the same transaction, so a failure can't leave half-deleted data. Control characters are stripped from display names (NUL caused 500 errors), and Turkmen copy uses akkaunt everywhere.

Carberk

Display names, generated avatars, and listing editing

Every user gets a generated name and avatar, shown on Cabinet and Profile. Users can edit their display name, and sellers can edit a published listing section by section.

Carberk

Sell flow: preview, clear blockers and a contact phone step

The check-and-publish step gained a preview with per-section Change links and named blockers instead of generic errors, and a new contact step lets the seller pick or confirm the contact phone bound to the listing.

Carberk

Sell wizard exit saves the draft; photos move to step 3

The Sell wizard's close control now persists the in-progress draft instead of discarding it, and photo selection moved up to step 3 with continue-on-pick and upload failures listed under the grid.

Relaunch at myorl.up.railway.app

Site restored on a new Railway project after the original deployment lapsed.

Carberk

Messages, notifications, and release handoff mapped

Messages list rows and conversation screens with mute, report, and block; unread count on the Messages tab; the notification center on Cabinet; contact phone confirmation API; and the Android reviewer release handoff documented for the planned store submission.

Carberk

Cabinet becomes the app menu; legal and account flows wired

Cabinet replaced Settings as the app menu. Legal pages and posting rules are linked from Cabinet rows, the account-deletion flow explains consequences and schedules the purge, and language and theme pickers moved to bottom sheets.

Carberk

Search screen and full-screen search parameters

Search screen for brands, models, and years, then the full-screen search parameters form replacing the filter sheet. Listing detail gained owner and sold states. Results, filters and sorting now look the same on every screen.

Carberk

Sprint 11: test access for store reviewers

Store reviewers get a sign-in bypass that is logged for audit, plus seeded demo data, so they can test the app without real listings.

Carberk

Hosting plan: Railway first, Turkmenistan later

Staging and production move to Railway until the app store approves the app, then to servers inside Turkmenistan. Everything stays in plain Docker containers, so the move is a redeploy. This replaces the original offline-only plan.

Carberk

Sprint 10: chat, message notifications and mobile polish

Buyers and sellers can chat, and new messages trigger push notifications. Verified-phone seller badges and condition disclosure (damage and known issues) shipped in the same weeks.

Carberk

Conversations API and seller chat list

Open and list conversations use-cases landed in the API, followed by the seller conversation list on the mobile Chat tab.

Production hardening for launch

CSP and HSTS security headers, per-locale sitemap and static params, ISR on the home route, production routing fixes for slug pages, and mobile search and tab repairs ahead of go-live.

Search corpus seed and Strapi webhook lifecycle

Loaded all content into Meilisearch. Strapi now reindexes a page whenever staff edit, unpublish or delete it, and Greek and Russian synonym lists improve matches.

Carberk

7-step sell flow in the mobile app

Listing creation in the mobile app, with step validation, photo upload and catalog pickers.

Carberk

Car catalog in Turkmen, Russian and English

Brands, models, colors, body types, regions and other lookup lists, plus exchange rates for price conversion.

Carberk

Phone sign-in shipped

Sign-in with one-time codes sent through a custom SMS gateway, sessions on up to 10 devices, and rate limits on code requests.

OpenAI Responses API translation layer and vLLM reference docs

Added Responses API support (schemas, SSE, compaction, translation to chat completions) so both OpenAI API families work against Gonka executors, plus a vLLM Kimi K2 reference documenting how tool-call and reasoning parsing shapes what the gateway receives upstream.

TypeScript + Zod conversion with upstream chunk-validation fix

All source modules converted to strict TypeScript with Zod validation at both external boundaries. validateUpstreamChunk now catches non-OpenAI-shaped SSE chunks at the seam. This fixes the bug where Gonka emits {"error":"terminated"} as a bare string, previously forwarded verbatim and breaking downstream clients' schema validation. 89 unit tests passing across 17 suites.

GonkaProvider first commit: an OpenAI-compatible proxy

First public commit of the gateway: an Express service proxying chat completions to Gonka ML nodes through the signed gonka-openai client, with an example consumer script.

Gateway layout, Docker packaging, and multimodal normalization

Gateway implementation moved under src/ with a root shim, Dockerfile and compose added, and three ADRs written. Media normalization hardened for empty assistant/tool multimodal payloads from MCP/OpenCode tool rounds, eliminating a class of upstream 'content must not be empty' rejections.

Build Log | Bagtyyar