Bagtyyar

Build Log

Active

Active development rhythm and milestone progress — updated as the portfolio evolves.

Carberk

Sign-in code logs redacted; Play submission decisions recorded

Sign-in code log lines now carry only the last four digits of the phone number, Google Play command-line publishing was researched and documented, the founder's 2026-10-06 decisions were recorded in the submission pack, and the DB seed guard gained a load-order probe plus typecheck coverage for packages/db/scripts.

Carberk

Store release wired to the existing Play app as version 2.0.0

The EAS production profile builds as com.auto_tm.ynamly so the rewrite updates the existing Play listing, with version-code auto-increment and a validate:eas-env guard that refuses profile/package mismatches. The production build check now accepts autotm.bagtyyar.dev hosts, and the rewrite is named 2.0.0 against the existing app's 1.0.0 builds.

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 — a message is accepted only for an attachment key the presign issued for that conversation.

Carberk

Privacy hardening — credential redaction and data-handling decisions

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 — the full submission pack for the planned Play release.

Carberk

Account deletion made atomic; Turkmen copy and profile fixes

AccountDeletionUnitOfWork now runs the deletion schedule and the listing archive in one transaction, with refresh-session revocation outside it so failures stay retryable. Control characters are stripped from Display Names (NUL previously caused 500s), and every Turkmen account string uses akkaunt across mobile, web, legal pages, and email.

Carberk

Display names, generated avatars, and listing editing

Every user gets a name number and avatar index shown on Cabinet and Profile, Display Name editing landed with a shared validation rule, and a published listing can now be edited from a section list instead of a single form.

Carberk

Sell wizard publish flow — preview, named blockers, 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

ADR-0082: an issue may carry up to three ordered slices

Delivery-process decision recorded: a single issue can be decomposed into at most three ordered, independently mergeable slices, keeping PR scope reviewable without fragmenting the feature.

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 the celebrated-abundance Railway project and verified live after the original deployment lapsed; appointment-picker tests pinned to a fixed system time to remove a date-dependent failure.

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 (ADR-0081); 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, sort, and shared large cards standardized across surfaces.

Carberk

Governed domain glossary for delivery

Established a governed AutoTM domain glossary and a glossary-aware shape-with-docs workflow, carrying canonical vocabulary through downstream delivery so code, specs, and reviews use the same terms.

Carberk

Sprint 11 — deployable runtime contract and reviewer seed

Established the deployable runtime contract and a durable MinIO contract, added a reviewer authentication bypass with durable audit, and shipped a reviewer scenario seed so store reviewers can exercise the app without real listings.

Carberk

ADR-0039: phased cloud-first hosting

Hosting decision revised: staging and production move to Railway until app-store verification completes, then cut over to infrastructure inside Turkmenistan. Components stay plain Docker containers so the cutover is a lift-and-shift. Supersedes the fully air-gapped charter.

Carberk

Sprint 10 shipped — rich chat, direct-message notifications, mobile polish

Rich chat between buyers and sellers, direct-message push eligibility folded into the notification pipeline, and a mobile polish pass. Sprint 10 closed with a retrospective; verified-phone seller signals and structured condition disclosure (Damaged plus Known issues) landed earlier in the same window.

Carberk

Browse and listing read surfaces audited

Mobile read surfaces, filtered feed query hooks, and the listing browse funnel were audited and drift-corrected; the S8a pass closed with the remaining web SSR work deferred explicitly.

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. Feed ranking moved behind a port with a chronological adapter and tightened test coverage.

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

Bulk-seeded the full search corpus into Meilisearch and wired Strapi webhooks so create, update, unpublish, and delete events reindex with locale-scoped deletes; bilingual synonym and stopword dictionaries added with sync tooling.

Carberk

Listings mobile wizard — 7-step flow with upload state machine

Expo mobile app listing creation wizard with step validation, media upload staging, and catalog integration. Prisma schema extended with ListingDraft, ListingMedia, and ExchangeRate. Known gaps documented: autosave edge cases, orphan cleanup, public listing-detail route pending.

Carberk

Catalog context with trilingual seed data

Read endpoints for Brand, Model, Color, BodyType, Region, City, EngineType, Transmission, and DriveType. Seed data in Turkmen, Russian, and English. FX rates table for currency conversion.

Carberk

Identity context shipped — OTP login, JWT sessions, multi-device cap

Phone OTP authentication via custom SMS gateway with 5-device fleet. JWT access tokens and bcrypt-hashed refresh tokens. Multi-device session cap at 10 with FIFO eviction. Rate limiting on OTP endpoints. Full domain + application + e2e test coverage.

OpenAI Responses API translation layer and vLLM reference docs

Added a Responses API surface (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.

Carberk

Prisma schema and 8 migrations applied

Single schema file in packages/db covering identity, catalog, listings, media, exchange rates, and subscriptions. Type-safe client generated and consumed by API, worker, and SMS-gateway apps.

Carberk

Turborepo monorepo scaffold with 7 apps and 5 packages

Turbo.json pipeline configured with lint, typecheck, test, and build stages. Shared packages established for Prisma schema, Zod contracts, UI tokens, tsconfig, and ESLint config. Docker Compose dev environment with Postgres 16, Redis 7, and MinIO.

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 — fixing 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 initial commit — working 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.

Ready to build something that lasts?

Let’s talk about your project. I’ll bring the discipline, you bring the vision.

Work With Me