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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
Site restored on a new Railway project after the original deployment lapsed.
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.
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.
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.
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.
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.
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.
Open and list conversations use-cases landed in the API, followed by the seller conversation list on the mobile Chat tab.
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.
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.
Listing creation in the mobile app, with step validation, photo upload and catalog pickers.
Brands, models, colors, body types, regions and other lookup lists, plus exchange rates for price conversion.
Sign-in with one-time codes sent through a custom SMS gateway, sessions on up to 10 devices, and rate limits on code requests.
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.
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.
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 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.