<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Reallexi LLC</title>
    <description>The latest articles on DEV Community by Reallexi LLC (@reallexi_llc_384b040df139).</description>
    <link>https://dev.to/reallexi_llc_384b040df139</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4113032%2F19e29637-cdcd-4498-80b1-7c8acf8f9bf8.jpg</url>
      <title>DEV Community: Reallexi LLC</title>
      <link>https://dev.to/reallexi_llc_384b040df139</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/reallexi_llc_384b040df139"/>
    <language>en</language>
    <item>
      <title>Building Apex Coloring: 3D Art Studio for Kids 3+</title>
      <dc:creator>Reallexi LLC</dc:creator>
      <pubDate>Sun, 13 Sep 2026 14:24:04 +0000</pubDate>
      <link>https://dev.to/reallexi_llc_384b040df139/building-apex-coloring-3d-art-studio-for-kids-3-11ln</link>
      <guid>https://dev.to/reallexi_llc_384b040df139/building-apex-coloring-3d-art-studio-for-kids-3-11ln</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fguedfjopywqsl4geas6h.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fguedfjopywqsl4geas6h.png" alt=" " width="800" height="1422"&gt;&lt;/a&gt;&lt;br&gt;
Apex Coloring is out now on Web, iOS, Android. This is how it got made: the decisions, the pipeline, and what I would do differently.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it is
&lt;/h2&gt;

&lt;p&gt;Apex Coloring — a 3D art studio for kids 3+. Color 3D animals, paint, solve art puzzles, play mini games, learn letters and numbers. No ads, no data collection, made for little hands.&lt;/p&gt;

&lt;p&gt;Color 3D animals, paint, solve art puzzles, play mini games, learn letters and numbers. No ads, no data collection, made for little hands.&lt;/p&gt;

&lt;h2&gt;
  
  
  GDPR / CCPA — and deletion that actually deletes
&lt;/h2&gt;

&lt;p&gt;Legal bases: contract (gameplay, purchases), legitimate interest (fraud, security, first-party analytics), consent (personalised ads, push, marketing). Endpoints, all behind an authenticated session, with web versions that work after the app is uninstalled:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Endpoint: Behaviour&lt;/li&gt;
&lt;li&gt;GET /api/account/export: queued export → signed 48 h URL to JSON+CSV of every row keyed to the account (including the consent records). 1 per 7 days.&lt;/li&gt;
&lt;li&gt;POST /api/account/delete + web /account/delete: typed DELETE + re-auth. Immediate: sessions revoked, account hidden. Within 7 days (undo window): cascade delete; purchases pseudonymised (legal hold).&lt;/li&gt;
&lt;li&gt;GET/PATCH /api/account/privacy: current consents + age band&lt;/li&gt;
&lt;li&gt;POST /api/account/restrict: "limit processing": keep the account, stop analytics and chat retention&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The real lesson: deletion must be probe-verified, not assumed. The deletion test deletes a fully-populated account and then asserts zero orphans, enumerating targets from the schema itself so a new table cannot be forgotten:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;every table with an account-id column — enumerate sqlite_master (or the catalog), don't
hand-list;&lt;/li&gt;
&lt;li&gt;every file store — avatar uploads, save blobs, export zips left on disk;&lt;/li&gt;
&lt;li&gt;every pointer — cache entries, queues, live sessions that could resurrect the row (evict from
in-memory caches before deleting, or an autosave tick writes the account back);&lt;/li&gt;
&lt;li&gt;consent rows and…&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Camera per game type
&lt;/h2&gt;

&lt;p&gt;game.config.json gameType selects config/game-types/.json, whose camera block the rig is built from:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;gameType: camera.type camera.style camera.controls&lt;/li&gt;
&lt;li&gt;city-builder: orthographic isometric pan-zoom-rotate&lt;/li&gt;
&lt;li&gt;idle-tycoon: orthographic fixed-iso pan-zoom&lt;/li&gt;
&lt;li&gt;racing: perspective chase follow&lt;/li&gt;
&lt;li&gt;arcade: perspective third-person follow&lt;/li&gt;
&lt;li&gt;puzzle: perspective top-down fixed&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For the orthographic styles, zoom is the scale (camera.zoom = pixels per world unit, exponential steps so wheel and pinch feel identical), position is derived each frame from {target, zoom, yaw, pitch} at a fixed distance, and rotation snaps to the four cardinal views with a tween. Pitch clamps ~25°–60°; target clamps to world bounds plus a margin. For perspective styles the rig is a follow controller with the same clamping discipline. Either way the rig owns one small mutable object read in useFrame — never React state.&lt;/p&gt;

&lt;p&gt;An orthographic camera has a useful side effect: LOD can be global per zoom tier rather than per-object distance — one state swap, no mid-screen&lt;/p&gt;

&lt;h2&gt;
  
  
  Billing flow (server-authoritative)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Store panel opens → billing.products with this store's product ids from the server catalog (storeIds.google are plain SKUs, storeIds.apple are reverse-DNS). Asking one store for the other's ids returns an empty list and the panel silently falls back to reference prices — which is how a wrong-store bug hides, so which store to ask is a build-time fact (native.platform), never a runtime guess.&lt;/li&gt;
&lt;li&gt;billing.purchase {sku, accountId, type, offerToken?} opens the sheet; the account id rides the receipt (obfuscated account id / app account token) so the server can bind it.&lt;/li&gt;
&lt;li&gt;The outcome arrives as the purchase event carrying platform and the receipt (Play purchase token / StoreKit signed transaction).&lt;/li&gt;
&lt;li&gt;The page routes on the event's own platform, POSTs to the matching server verifier (which checks with the store, credits once — idempotent on order/transaction id — and answers {consume}), then always calls billing.finish. Both halves matter: an unconsumed purchase cannot be re-bought; an unfinished transaction is re-delivered on every launch forever.&lt;/li&gt;
&lt;li&gt;On launch, unfinished purchases replay with replay:true and take the same path — a crash between 3 and 4 loses nothing.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Subscriptions additionally require the recurring terms on the purchase screen, before the buy button (price, period, auto-renews-until-cancelled, how to cancel, live terms/privacy links) — both stores reject builds…&lt;/p&gt;

&lt;h2&gt;
  
  
  Age gate and COPPA
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Neutral age screen at first run: ask for birth year only, store an age_band
(u13 / 13_15 / 16_17 / adult), never a date. The band is immutable from the client;
support can change it with an audited reason.&lt;/li&gt;
&lt;li&gt;Do not offer bands below 13 unless you are doing full COPPA (verifiable parental consent,
direct notice, the works). The cheap, defensible middle: u13 accounts get a limited mode — no
chat, no publicly shown name, no purchases, no ads, no email collected (guest only) — which keeps
you out of COPPA's "actual knowledge" trap without building a consent flow.&lt;/li&gt;
&lt;li&gt;13_15: no purchases, no ads, stricter chat filter. 16_17: purchases allowed (device parental
controls apply), non-personalised ads only.&lt;/li&gt;
&lt;li&gt;Make the defaults privacy-protective for everyone (non-personalised ads, no profiling, minimal
data); then the minor bands only add restrictions rather than needing a parallel stack (UK AADC /
EU DSA&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Latest changes
&lt;/h2&gt;

&lt;p&gt;Changelog&lt;/p&gt;

&lt;p&gt;Every release of Apex Coloring, newest first. Each entry carries one block per store locale in the format the Play Console release-notes field takes, so the notes can be pasted straight in — and App Store Connect, the website and the in-app What's New panel all read the same source.&lt;/p&gt;

&lt;p&gt;Generated by npm run release:sync from shared/content/release-notes.json — edit that file, never this one. Play allows at most 500 characters per language.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is next
&lt;/h2&gt;

&lt;p&gt;It is live at &lt;a href="https://apexkids.reallexi.io" rel="noopener noreferrer"&gt;https://apexkids.reallexi.io&lt;/a&gt;. If you have shipped something similar, I would like to hear what you would have cut.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fx1ylhrmn7wtocgd061tt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fx1ylhrmn7wtocgd061tt.png" alt=" " width="800" height="391"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>gamedev</category>
      <category>ios</category>
      <category>mobile</category>
      <category>showdev</category>
    </item>
    <item>
      <title>Building Apex City: Build a city that actually works.</title>
      <dc:creator>Reallexi LLC</dc:creator>
      <pubDate>Wed, 09 Sep 2026 19:51:16 +0000</pubDate>
      <link>https://dev.to/reallexi_llc_384b040df139/building-apex-city-build-a-city-that-actually-works-1kel</link>
      <guid>https://dev.to/reallexi_llc_384b040df139/building-apex-city-build-a-city-that-actually-works-1kel</guid>
      <description>&lt;p&gt;Apex City is out now on iOS, Android, Web. This is how it got made: the decisions, the pipeline, and what I would do differently.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it is
&lt;/h2&gt;

&lt;p&gt;Apex City is a city builder with a real simulation underneath. Every home has residents who need power, water, schools and a safe street. Lay roads, zone districts, build utilities and services, and watch traffic, blackouts and crime emerge from your layout rather than from random events. Fix the water shortage you created, then redesign the district that caused it.&lt;br&gt;
Transport is the endgame: open an airport, a seaport and a rail network, add bus and metro lines and a trucking fleet, feed sawmills, refineries and factories into cargo routes, and ship goods to other mayors on player-to-player routes.&lt;br&gt;
Play together in alliances of up to 50 with weekly events and seasons. Leaderboards reward cooperation; there is no sabotage and no raiding. Everything is earnable with coins, there are no loot boxes, and there is no advertising SDK at all. Your city keeps running on a plane or in a lift and syncs the moment you reconnect.&lt;/p&gt;

&lt;p&gt;Brownouts, traffic jams and crime are outcomes of your plan, not luck. And it all runs offline, with no ads and no loot boxes, on iPhone, iPad, Android and the web.&lt;/p&gt;

&lt;h2&gt;
  
  
  Implementation status (M10, 2026-08-22)
&lt;/h2&gt;

&lt;p&gt;Management depth on top of the M1 systems below. Code: shared/sim/management/, shared/content/management.json, server/src/http/m10Routes.js, client/src/ui/management/. Every number is server-authoritative (simulate()), every panel reads GET /api/city/management.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Area: Status Notes&lt;/li&gt;
&lt;li&gt;Department budgets (§14): Implemented Police / fire / health / education / transport / parks at 0-150 % (dept action). Radius of that service's buildings x 0.4..1.25, happiness +/- per department weight, cost = base/h x pct x buildings of that kind, booked as departments in the report. Fire budget also sets the extinguish time (5 min at 100 %).&lt;/li&gt;
&lt;li&gt;Ordinances: Implemented (15) management.json ordinances[]: recycling, smoke detectors, free transit, night market, tourism promo, green energy, rent control, neighbourhood watch, insurance, industrial tax break, water conservation, curfew, clean air, job fair, vaccination. Level gated, hourly cost, effects folded by policyModifiers() into pollution, fire risk, crime, income per category, upkeep per category, tourism, rebuild cost, epidemic risk, employment, health, fares/ridership.&lt;/li&gt;
&lt;li&gt;Bonds + credit rating (§14): Implemented AAA..C from (loans + bonds + overdraft) / daily income; 10k / 25k / 50k, 14-day term, rate per rating, 3 open max, C cannot issue; hourly slices beside loans.&lt;/li&gt;
&lt;li&gt;Taxes per zone x density (§14): Implemented taxDensity[zone][d]…&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  City and tiles
&lt;/h2&gt;

&lt;p&gt;Tile byte layout (6 bytes per cell):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Byte: Field Values&lt;/li&gt;
&lt;li&gt;0: zone 0 none, 1 res-low, 2 res-high, 3 com-low, 4 com-high, 5 ind, 6 office, 7 park, 8 special&lt;/li&gt;
&lt;li&gt;1: road 0 none, 1 street, 2 avenue, 3 highway, 4 rail, 5 metro; high nibble = connection mask N/E/S/W&lt;/li&gt;
&lt;li&gt;2: terrain 0 grass, 1 sand, 2 water, 3 rock, 4 forest; high nibble = height 0..15&lt;/li&gt;
&lt;li&gt;3: level density/growth level 0..255 (zoned tiles)&lt;/li&gt;
&lt;li&gt;4: flags bit0 powered, bit1 watered, bit2 fire-covered, bit3 police, bit4 health, bit5 educated, bit6 polluted, bit7 occupied-by-building&lt;/li&gt;
&lt;li&gt;5: bref low byte of the index into City.buildings array (0xFF = none); high byte from flags bit7 + level overflow when &amp;gt; 255 buildings (see sim/grid.js bref())&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;cities.stats_json&lt;/p&gt;

&lt;h2&gt;
  
  
  XP sources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Source: XP formula Typical amount at L10 Typical amount at L25&lt;/li&gt;
&lt;li&gt;Collecting production: 10 % of the goods' sell value, min 1 2 per planks batch 16 per furniture batch&lt;/li&gt;
&lt;li&gt;Completing a build or upgrade: cost / 50 30 (1,500-coin clinic) 400 (20,000-coin hospital)&lt;/li&gt;
&lt;li&gt;Completing a road segment: 1 per cell 4 4&lt;/li&gt;
&lt;li&gt;Contract delivered: 15 % of payout 60 300&lt;/li&gt;
&lt;li&gt;Quest step completed: fixed per quest (25 to 2,500) 75 400&lt;/li&gt;
&lt;li&gt;Flight / ship / train arrival: 2 per 10 pax or per tonne, min 5 5 40&lt;/li&gt;
&lt;li&gt;Trade route delivery (player to player): 10 % of goods value, both sides n/a (L15) 120&lt;/li&gt;
&lt;li&gt;Daily task (3 per day): 50 + 12 * level 170 350&lt;/li&gt;
&lt;li&gt;Friend help received / given: 5 5 5&lt;/li&gt;
&lt;li&gt;Population milestone (every 1,000 residents): 250 + 10 * level 350 500&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;XP is never sold for gems or coins. Gems can rush timers, which indirectly speeds XP, and that indirect path is the only paid acceleration (see section&lt;/p&gt;

&lt;h2&gt;
  
  
  Levels and XP curve
&lt;/h2&gt;

&lt;p&gt;Levels run 1 to 60. XP required to go from level L to L+1:&lt;/p&gt;

&lt;p&gt;Expected XP per day grows with the city (more buildings, longer contracts, more routes), so "days to reach" below assumes an engaged free player who logs in 3 to 4 times a day and uses no gems for speed. Cumulative XP is the total earned since level 1.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Level: xpToNext Cumulative XP to reach XP/day at this level (typical) Expected day reached&lt;/li&gt;
&lt;li&gt;1: 120 0 600 0&lt;/li&gt;
&lt;li&gt;2: 403 120 700 0.2&lt;/li&gt;
&lt;li&gt;3: 820 523 900 0.8&lt;/li&gt;
&lt;li&gt;5: 1,999 2,700 1,400 2.5&lt;/li&gt;
&lt;li&gt;10: 6,747 21,250 3,000 9&lt;/li&gt;
&lt;li&gt;15: 13,719 68,092 5,500 19&lt;/li&gt;
&lt;li&gt;20: 22,696 153,874 9,000 32&lt;/li&gt;
&lt;li&gt;25: 33,541 288,322 13,000 46&lt;/li&gt;
&lt;li&gt;30: 45,609 480,548 18,000 62&lt;/li&gt;
&lt;li&gt;40: 76,315 1,072,026 30,000 96&lt;/li&gt;
&lt;li&gt;50: 113,600 1,994,557 45,000 136&lt;/li&gt;
&lt;li&gt;59: 150,720 3,158,829 60,000 165&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Total XP to cap is about 3.31 million, roughly 5.5 months of regular free play, matching the two-season horizon in&lt;/p&gt;

&lt;h2&gt;
  
  
  What is next
&lt;/h2&gt;

&lt;p&gt;It is live at &lt;a href="https://apexcity.reallexi.io" rel="noopener noreferrer"&gt;https://apexcity.reallexi.io&lt;/a&gt;. If you have shipped something similar, I would like to hear what you would have cut.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Building Apex City: Build a city that actually works.</title>
      <dc:creator>Reallexi LLC</dc:creator>
      <pubDate>Wed, 09 Sep 2026 16:19:57 +0000</pubDate>
      <link>https://dev.to/reallexi_llc_384b040df139/building-apex-city-build-a-city-that-actually-works-4lm8</link>
      <guid>https://dev.to/reallexi_llc_384b040df139/building-apex-city-build-a-city-that-actually-works-4lm8</guid>
      <description>&lt;p&gt;Apex City is out now on iOS, Android, Web. This is how it got made: the decisions, the pipeline, and what I would do differently.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it is
&lt;/h2&gt;

&lt;p&gt;Apex City is a city builder with a real simulation underneath. Every home has residents who need power, water, schools and a safe street. Lay roads, zone districts, build utilities and services, and watch traffic, blackouts and crime emerge from your layout rather than from random events. Fix the water shortage you created, then redesign the district that caused it.&lt;br&gt;
Transport is the endgame: open an airport, a seaport and a rail network, add bus and metro lines and a trucking fleet, feed sawmills, refineries and factories into cargo routes, and ship goods to other mayors on player-to-player routes.&lt;br&gt;
Play together in alliances of up to 50 with weekly events and seasons. Leaderboards reward cooperation; there is no sabotage and no raiding. Everything is earnable with coins, there are no loot boxes, and there is no advertising SDK at all. Your city keeps running on a plane or in a lift and syncs the moment you reconnect.&lt;/p&gt;

&lt;p&gt;Brownouts, traffic jams and crime are outcomes of your plan, not luck. And it all runs offline, with no ads and no loot boxes, on iPhone, iPad, Android and the web.&lt;/p&gt;

&lt;h2&gt;
  
  
  Implementation status (M10, 2026-08-22)
&lt;/h2&gt;

&lt;p&gt;Management depth on top of the M1 systems below. Code: shared/sim/management/, shared/content/management.json, server/src/http/m10Routes.js, client/src/ui/management/. Every number is server-authoritative (simulate()), every panel reads GET /api/city/management.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Area: Status Notes&lt;/li&gt;
&lt;li&gt;Department budgets (§14): Implemented Police / fire / health / education / transport / parks at 0-150 % (dept action). Radius of that service's buildings x 0.4..1.25, happiness +/- per department weight, cost = base/h x pct x buildings of that kind, booked as departments in the report. Fire budget also sets the extinguish time (5 min at 100 %).&lt;/li&gt;
&lt;li&gt;Ordinances: Implemented (15) management.json ordinances[]: recycling, smoke detectors, free transit, night market, tourism promo, green energy, rent control, neighbourhood watch, insurance, industrial tax break, water conservation, curfew, clean air, job fair, vaccination. Level gated, hourly cost, effects folded by policyModifiers() into pollution, fire risk, crime, income per category, upkeep per category, tourism, rebuild cost, epidemic risk, employment, health, fares/ridership.&lt;/li&gt;
&lt;li&gt;Bonds + credit rating (§14): Implemented AAA..C from (loans + bonds + overdraft) / daily income; 10k / 25k / 50k, 14-day term, rate per rating, 3 open max, C cannot issue; hourly slices beside loans.&lt;/li&gt;
&lt;li&gt;Taxes per zone x density (§14): Implemented taxDensity[zone][d]…&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  City and tiles
&lt;/h2&gt;

&lt;p&gt;Tile byte layout (6 bytes per cell):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Byte: Field Values&lt;/li&gt;
&lt;li&gt;0: zone 0 none, 1 res-low, 2 res-high, 3 com-low, 4 com-high, 5 ind, 6 office, 7 park, 8 special&lt;/li&gt;
&lt;li&gt;1: road 0 none, 1 street, 2 avenue, 3 highway, 4 rail, 5 metro; high nibble = connection mask N/E/S/W&lt;/li&gt;
&lt;li&gt;2: terrain 0 grass, 1 sand, 2 water, 3 rock, 4 forest; high nibble = height 0..15&lt;/li&gt;
&lt;li&gt;3: level density/growth level 0..255 (zoned tiles)&lt;/li&gt;
&lt;li&gt;4: flags bit0 powered, bit1 watered, bit2 fire-covered, bit3 police, bit4 health, bit5 educated, bit6 polluted, bit7 occupied-by-building&lt;/li&gt;
&lt;li&gt;5: bref low byte of the index into City.buildings array (0xFF = none); high byte from flags bit7 + level overflow when &amp;gt; 255 buildings (see sim/grid.js bref())&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;cities.stats_json&lt;/p&gt;

&lt;h2&gt;
  
  
  XP sources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Source: XP formula Typical amount at L10 Typical amount at L25&lt;/li&gt;
&lt;li&gt;Collecting production: 10 % of the goods' sell value, min 1 2 per planks batch 16 per furniture batch&lt;/li&gt;
&lt;li&gt;Completing a build or upgrade: cost / 50 30 (1,500-coin clinic) 400 (20,000-coin hospital)&lt;/li&gt;
&lt;li&gt;Completing a road segment: 1 per cell 4 4&lt;/li&gt;
&lt;li&gt;Contract delivered: 15 % of payout 60 300&lt;/li&gt;
&lt;li&gt;Quest step completed: fixed per quest (25 to 2,500) 75 400&lt;/li&gt;
&lt;li&gt;Flight / ship / train arrival: 2 per 10 pax or per tonne, min 5 5 40&lt;/li&gt;
&lt;li&gt;Trade route delivery (player to player): 10 % of goods value, both sides n/a (L15) 120&lt;/li&gt;
&lt;li&gt;Daily task (3 per day): 50 + 12 * level 170 350&lt;/li&gt;
&lt;li&gt;Friend help received / given: 5 5 5&lt;/li&gt;
&lt;li&gt;Population milestone (every 1,000 residents): 250 + 10 * level 350 500&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;XP is never sold for gems or coins. Gems can rush timers, which indirectly speeds XP, and that indirect path is the only paid acceleration (see section&lt;/p&gt;

&lt;h2&gt;
  
  
  Levels and XP curve
&lt;/h2&gt;

&lt;p&gt;Levels run 1 to 60. XP required to go from level L to L+1:&lt;/p&gt;

&lt;p&gt;Expected XP per day grows with the city (more buildings, longer contracts, more routes), so "days to reach" below assumes an engaged free player who logs in 3 to 4 times a day and uses no gems for speed. Cumulative XP is the total earned since level 1.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Level: xpToNext Cumulative XP to reach XP/day at this level (typical) Expected day reached&lt;/li&gt;
&lt;li&gt;1: 120 0 600 0&lt;/li&gt;
&lt;li&gt;2: 403 120 700 0.2&lt;/li&gt;
&lt;li&gt;3: 820 523 900 0.8&lt;/li&gt;
&lt;li&gt;5: 1,999 2,700 1,400 2.5&lt;/li&gt;
&lt;li&gt;10: 6,747 21,250 3,000 9&lt;/li&gt;
&lt;li&gt;15: 13,719 68,092 5,500 19&lt;/li&gt;
&lt;li&gt;20: 22,696 153,874 9,000 32&lt;/li&gt;
&lt;li&gt;25: 33,541 288,322 13,000 46&lt;/li&gt;
&lt;li&gt;30: 45,609 480,548 18,000 62&lt;/li&gt;
&lt;li&gt;40: 76,315 1,072,026 30,000 96&lt;/li&gt;
&lt;li&gt;50: 113,600 1,994,557 45,000 136&lt;/li&gt;
&lt;li&gt;59: 150,720 3,158,829 60,000 165&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Total XP to cap is about 3.31 million, roughly 5.5 months of regular free play, matching the two-season horizon in&lt;/p&gt;

&lt;h2&gt;
  
  
  What is next
&lt;/h2&gt;

&lt;p&gt;It is live at &lt;a href="https://apexcity.reallexi.io" rel="noopener noreferrer"&gt;https://apexcity.reallexi.io&lt;/a&gt;. If you have shipped something similar, I would like to hear what you would have cut.&lt;/p&gt;

</description>
      <category>gamedev</category>
      <category>mobile</category>
      <category>showdev</category>
      <category>software</category>
    </item>
    <item>
      <title>Building BlockMyBlocks: A balance game for all ages</title>
      <dc:creator>Reallexi LLC</dc:creator>
      <pubDate>Tue, 08 Sep 2026 20:49:01 +0000</pubDate>
      <link>https://dev.to/reallexi_llc_384b040df139/building-blockmyblocks-a-balance-game-for-all-ages-4g84</link>
      <guid>https://dev.to/reallexi_llc_384b040df139/building-blockmyblocks-a-balance-game-for-all-ages-4g84</guid>
      <description>&lt;p&gt;BlockMyBlocks is out now on Web, iOS, Android. This is how it got made: the decisions, the pipeline, and what I would do differently.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it is
&lt;/h2&gt;

&lt;p&gt;A balance game for all ages. Stack the pieces on a deck that tips, hold it steady, and keep going — the levels never run out.&lt;/p&gt;

&lt;p&gt;Stack the pieces on a deck that tips, hold it steady, and keep going — the levels never run out.&lt;/p&gt;

&lt;h2&gt;
  
  
  Determinism and golden tests
&lt;/h2&gt;

&lt;p&gt;The sim is pure and deterministic — time and seed are parameters. That buys the strongest cheap test there is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The catch-up law: simulate(state, a+b) === simulate(simulate(state, a), b) for arbitrary
splits. Offline catch-up, tab-restore and server ticks all depend on it. Test it directly with
quantised splits (e.g. 120 = 60+60), plus: rewards are integers, no NaN anywhere after a very
long run.&lt;/li&gt;
&lt;li&gt;Golden files: shared/test/golden/.json holds
{seed, state0, actions[], expected: {hash per interval, final snapshot}}. The test replays the
actions and compares a stable hash of the state at every interval. Any sim change fails golden;
--update regenerates only after a human confirms the change is intended and the
PR says why. Keep scenarios small but adversarial (empty world, dense world, each subsystem
stressed, one long-horizon run).&lt;/li&gt;
&lt;li&gt;Cross-runtime determinism: the browser smoke computes the same hashes with the same shared
sim and must match the server — catches engine/float differences before they become a&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Scene architecture
&lt;/h2&gt;

&lt;p&gt;Rules that keep the frame loop cheap:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;State reads in useFrame go through store.getState(), never per-instance subscriptions. Selectors are narrow (useWorld(s =&amp;gt; s.entities)).&lt;/li&gt;
&lt;li&gt;HUD is DOM, not canvas. Everything tappable is React DOM for accessibility and crisp text; in-world labels are drei with a hard cap (~40 visible, nearest first).&lt;/li&gt;
&lt;li&gt;Zero per-frame allocation in steady state: pre-parsed THREE.Color constants (col.copy(c), never col.set('#hex')), module-level scratch vectors, geometry rebuilds gated on a content signature, not on "something changed".&lt;/li&gt;
&lt;li&gt;Debug handles live on window.game: stats() (draw calls, tris, dpr, tier, fps), mem() (GPU bytes by owner), setQuality, setDpr, setTimeOfDay, governor flag. Test scripts read these; nothing in gameplay&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Recommended platform collections
&lt;/h2&gt;

&lt;p&gt;The generic meta-game set. Add game collections beside them; keep these shapes so payments, social and live-ops code stays portable between games. All timestamps epoch-ms.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Collection: Id Fields&lt;/li&gt;
&lt;li&gt;accounts: account id (nanoid) displayName, isGuest, &lt;code&gt;providers: [{provider: 'guest'\ 'google'\ 'apple'\ 'email', subject}], email?, passwordHash?, locale, country?, createdAt, lastSeenAt, bannedAt?, bannedReason?&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;sessions: opaque 32-byte token (never logged) accountId, deviceId?, createdAt, expiresAt, lastUsedAt&lt;/li&gt;
&lt;li&gt;wallets: : balance (integer ≥ 0, a cache of the ledger sum), updatedAt&lt;/li&gt;
&lt;li&gt;wallet_ledger: : accountId, currency, delta, balanceAfter, reason (&lt;code&gt;'collect'\ 'purchase'\ 'gift'\ 'event'\ 'admin'\ 'refund'…), refType?, refId?, at&lt;/code&gt; — append-only; the ledger is truth&lt;/li&gt;
&lt;li&gt;purchases: : accountId, productId, provider (&lt;code&gt;'stripe'\ 'play'\ 'apple'), state ('pending'\ 'granted'\ 'refunded'\ 'failed'), amountCents?, currency?, createdAt, grantedAt?, refundedAt?, rawReceiptRef?&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;entitlements: : key ('season_pass:', 'no_ads', 'pack:'), sourcePurchaseId?, grantedAt, expiresAt? (null = permanent), revokedAt?&lt;/li&gt;
&lt;li&gt;leaderboard_entries: :: score, meta? (display extras, id-only), updatedAt; periodKey = 'all', ISO week '2026-W35', or an event id&lt;/li&gt;
&lt;li&gt;flags: flag key value, segments? ({country?, minLevel?, pct?}), version, updatedAt — live-ops overrides on top of content&lt;/li&gt;
&lt;li&gt;events: event id runtime…&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Validator-per-message
&lt;/h2&gt;

&lt;p&gt;Every message type — WS and REST body alike — has exactly one validator function in shared/protocol.mjs, used by the client before sending and by the server before touching state. Validators are whitelists: the only fields that exist afterwards are the ones they return.&lt;/p&gt;

&lt;p&gt;Unknown t values and oversized frames (&amp;gt; 16 KB) close the socket; unknown fields are dropped; null from a validator is BAD_PAYLOAD, before any service code runs. There is never a second, looser parser&lt;/p&gt;

&lt;h2&gt;
  
  
  What is next
&lt;/h2&gt;

&lt;p&gt;It is live at &lt;a href="https://ddkits.github.io/block-my-blocks" rel="noopener noreferrer"&gt;https://ddkits.github.io/block-my-blocks&lt;/a&gt;. If you have shipped something similar, I would like to hear what you would have cut.&lt;/p&gt;

</description>
      <category>gamedev</category>
      <category>mobile</category>
      <category>software</category>
      <category>testing</category>
    </item>
    <item>
      <title>Building Apex Coloring: 3D Art Studio for Kids 3+</title>
      <dc:creator>Reallexi LLC</dc:creator>
      <pubDate>Mon, 07 Sep 2026 15:00:18 +0000</pubDate>
      <link>https://dev.to/reallexi_llc_384b040df139/building-apex-coloring-3d-art-studio-for-kids-3-5af8</link>
      <guid>https://dev.to/reallexi_llc_384b040df139/building-apex-coloring-3d-art-studio-for-kids-3-5af8</guid>
      <description>&lt;p&gt;Apex Coloring is out now on Web, iOS, Android. This is how it got made: the decisions, the pipeline, and what I would do differently.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it is
&lt;/h2&gt;

&lt;p&gt;Apex Coloring — a 3D art studio for kids 3+. Color 3D animals, paint, solve art puzzles, play mini games, learn letters and numbers. No ads, no data collection, made for little hands.&lt;/p&gt;

&lt;p&gt;Color 3D animals, paint, solve art puzzles, play mini games, learn letters and numbers. No ads, no data collection, made for little hands.&lt;/p&gt;

&lt;h2&gt;
  
  
  Textures — baked in Blender, tiered per platform
&lt;/h2&gt;

&lt;p&gt;Models ship untextured; one atlas set per asset family ships beside them. scripts/blender/bake_textures.py builds 16 procedural node-tree materials per family on a 4×4 tile grid and runs two Cycles EMIT bakes (1 sample, no lights — a bake, not a render): base colour, and a packed data map. scripts/gen-textures.mjs then derives the tangent-space normal (from the baked height field) and the ORM (R occlusion / G roughness / B metalness / A emissive mask), and encodes one set per quality tier, capped at each tier's textureMax from config/platform-quality.json (high 2048 / medium 1024 / low 512):&lt;/p&gt;

&lt;p&gt;The client fetches exactly one tier (its own), chosen by the quality system — this is the other half of the platform-quality contract: the pipeline caps what each tier can even download.&lt;/p&gt;

&lt;p&gt;UV contract: faces carry TEXCOORD_0 = world-scaled tiling coordinates (metres per repeat, so brick courses align with floor lines) and TEXCOORD_1 = the tile origin, constant per face; the shader samples origin + fract(uv) * 0.25 with textureGrad so the tile wrap never picks a coarse mip. Only designated slots are tintable by the palette; everything else keeps its real albedo. The attributes survive weld/join/simplify/Draco, so all LODs share the atlas.&lt;/p&gt;

&lt;p&gt;KTX2 is a VRAM decision, not a download decision. Measured on an eleven-family set (4096 px albedo class):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;map: WebP download KTX2 download WebP VRAM…&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  PII inventory and retention
&lt;/h2&gt;

&lt;p&gt;Keep this table current — it is the privacy policy's "what we collect" section and the store data-safety form:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Data: Purpose Retention&lt;/li&gt;
&lt;li&gt;email (optional): login, receipts, recovery life of account&lt;/li&gt;
&lt;li&gt;password hash (Argon2id): login life of account&lt;/li&gt;
&lt;li&gt;display name, world/city name (UGC): gameplay life of account&lt;/li&gt;
&lt;li&gt;OAuth subject ids (Google/Apple/Facebook): login life of account&lt;/li&gt;
&lt;li&gt;age band (never a birth date): minor protections life of account&lt;/li&gt;
&lt;li&gt;IP hash (SHA-256, daily rotating salt) + UA family: rate limiting, fraud 30 days&lt;/li&gt;
&lt;li&gt;purchase rows (amount, currency, country, provider ids): fulfilment, refunds, tax 7 years (tax law) — pseudonymised on account deletion, account id replaced by a tombstone&lt;/li&gt;
&lt;li&gt;chat messages: gameplay 30 days or last 200 messages per channel, whichever is less&lt;/li&gt;
&lt;li&gt;avatars / player images: profile life of account — and they are "Photos and videos" in the Play data-safety form, even when they are only profile pictures; declaring them as "other" fails review&lt;/li&gt;
&lt;li&gt;analytics events (no free text, no names): first-party analytics 13 months raw; aggregates forever&lt;/li&gt;
&lt;li&gt;push tokens: notifications until unregistered / 60 days unused&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Never collected: precise location, contacts, phone numbers, card data (the payment providers hold it), raw IPs at rest. Player-chosen names are UGC: run them through the same profanity filter as chat plus a PII regex (emails, phone numbers) —…&lt;/p&gt;

&lt;h2&gt;
  
  
  Camera per game type
&lt;/h2&gt;

&lt;p&gt;game.config.json gameType selects config/game-types/.json, whose camera block the rig is built from:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;gameType: camera.type camera.style camera.controls&lt;/li&gt;
&lt;li&gt;city-builder: orthographic isometric pan-zoom-rotate&lt;/li&gt;
&lt;li&gt;idle-tycoon: orthographic fixed-iso pan-zoom&lt;/li&gt;
&lt;li&gt;racing: perspective chase follow&lt;/li&gt;
&lt;li&gt;arcade: perspective third-person follow&lt;/li&gt;
&lt;li&gt;puzzle: perspective top-down fixed&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For the orthographic styles, zoom is the scale (camera.zoom = pixels per world unit, exponential steps so wheel and pinch feel identical), position is derived each frame from {target, zoom, yaw, pitch} at a fixed distance, and rotation snaps to the four cardinal views with a tween. Pitch clamps ~25°–60°; target clamps to world bounds plus a margin. For perspective styles the rig is a follow controller with the same clamping discipline. Either way the rig owns one small mutable object read in useFrame — never React state.&lt;/p&gt;

&lt;p&gt;An orthographic camera has a useful side effect: LOD can be global per zoom tier rather than per-object distance — one state swap, no mid-screen&lt;/p&gt;

&lt;h2&gt;
  
  
  The postMessage bridge
&lt;/h2&gt;

&lt;p&gt;One JSON envelope in both directions; constants shared from shared/bridge.js so web and native cannot drift.&lt;/p&gt;

&lt;p&gt;Rules:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;id is opaque, unique, generated by the page; replies always echo it. Every request gets exactly one reply. Long-running flows (a purchase sheet) reply immediately with {started:true} and deliver the outcome as an event.&lt;/li&gt;
&lt;li&gt;Error codes are stable strings: unavailable, bad_namespace, bad_op, bad_request, cancelled, denied, simulator, sign_in_failed, purchase_error, native_error. Unknown ns/op returns unavailable — an older shell never hangs a newer web bundle.&lt;/li&gt;
&lt;li&gt;Payloads are JSON only. Never put a session token in a payload; the page owns auth.&lt;/li&gt;
&lt;li&gt;The page times out its own requests (default 60 s) and rejects with TIMEOUT; on the web (window.ReactNativeWebView absent) calls reject immediately with NO_BRIDGE, so every call site has a web fallback by construction.&lt;/li&gt;
&lt;li&gt;The reply lands on a different target per platform. react-native-webview's postMessage dispatches the reply as a MessageEvent on window on iOS but on document on Android, and the event does not bubble — so a window-only listener silently drops every Android reply and each call dies of its own timeout. The page must register the SAME handler on both window and document. Symptom when it is missing: Android shows "the store is not available" after a 30 s pause while iOS works perfectly (shipped in Apex…&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Latest changes
&lt;/h2&gt;

&lt;p&gt;Changelog&lt;/p&gt;

&lt;p&gt;Every release of Apex Coloring, newest first. Each entry carries one block per store locale in the format the Play Console release-notes field takes, so the notes can be pasted straight in — and App Store Connect, the website and the in-app What's New panel all read the same source.&lt;/p&gt;

&lt;p&gt;Generated by npm run release:sync from shared/content/release-notes.json — edit that file, never this one. Play allows at most 500 characters per language.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is next
&lt;/h2&gt;

&lt;p&gt;It is live at &lt;a href="https://apexkids.reallexi.io" rel="noopener noreferrer"&gt;https://apexkids.reallexi.io&lt;/a&gt;. If you have shipped something similar, I would like to hear what you would have cut.&lt;/p&gt;

</description>
      <category>gamedev</category>
      <category>mobile</category>
      <category>softwareengineering</category>
    </item>
    <item>
      <title>Building Real Memory AI Agent: Private AI agent execution for real developer work.</title>
      <dc:creator>Reallexi LLC</dc:creator>
      <pubDate>Mon, 07 Sep 2026 03:24:03 +0000</pubDate>
      <link>https://dev.to/reallexi_llc_384b040df139/building-real-memory-ai-agent-private-ai-agent-execution-for-real-developer-work-36cj</link>
      <guid>https://dev.to/reallexi_llc_384b040df139/building-real-memory-ai-agent-private-ai-agent-execution-for-real-developer-work-36cj</guid>
      <description>&lt;p&gt;Real Memory AI Agent is out now on VS Code, Chrome. This is how it got made: the decisions, the pipeline, and what I would do differently.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it is
&lt;/h2&gt;

&lt;p&gt;AI coding agent for VS Code with a Scrum/Agile Kanban board, workspace file edits, validation, screenshots, browser/CLI/MCP workflows, and local/cloud/custom model providers.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbnpg10x02b7iutb4dmh8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbnpg10x02b7iutb4dmh8.png" alt="Real Memory AI Agent menu" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Four Flows
&lt;/h2&gt;

&lt;p&gt;![Real Memory AI Agent flows][store-workflow]&lt;/p&gt;

&lt;p&gt;Real Memory AI Agent supports four model flows so tenants can choose speed, simplicity, specialization, or automatic routing.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Flow: Tenant Ability&lt;/li&gt;
&lt;li&gt;Auto: Let the agent choose the right route for the task, from quick answer to full implementation.&lt;/li&gt;
&lt;li&gt;Direct Model: Use the selected model directly for fast questions, tool-backed workspace work, and provider-native streaming.&lt;/li&gt;
&lt;li&gt;Single Model: Run one selected model across thinking, action, and reporting for simpler deployments.&lt;/li&gt;
&lt;li&gt;Planner + Coder: Use separate planner and coder models for serious project work, stronger scoping, and cleaner implementation results.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These flows are available across the VS Code extension and provider-backed runtime. The browser extension also exposes Direct Model and provider settings in a side&lt;/p&gt;

&lt;h2&gt;
  
  
  Help Test Real Memory AI Agent
&lt;/h2&gt;

&lt;p&gt;We are looking for developers, agencies, AI builders, browser power users, and teams with real projects to test Real Memory AI Agent and tell us what works, what breaks, and what would make it more useful.&lt;/p&gt;

&lt;p&gt;Testers can try the agent in the surfaces they already use:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;VS Code: install the VSIX, open the RM AI Agent chat, connect a provider, and ask it to inspect, edit, validate, document, or explain a real workspace.&lt;/li&gt;
&lt;li&gt;Chrome: load or install the Chrome package, open the side panel, connect a provider, inspect a tab, capture proof, and try browser-safe actions.&lt;/li&gt;
&lt;li&gt;Edge: install the Edge package or load the unpacked build, then test the same side-panel workflow in Microsoft Edge.&lt;/li&gt;
&lt;li&gt;CLI: run chat, ask, and run commands from the terminal for fast local project workflows and automation checks.&lt;/li&gt;
&lt;li&gt;MCP: start the local MCP runtime and verify that compatible clients can reach workspace, terminal, memory, and doctor tools.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;What we need feedback on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;First install experience: what was confusing, slow, missing, or blocked?&lt;/li&gt;
&lt;li&gt;Provider setup: which provider worked, which failed, and what error message helped or did not help?&lt;/li&gt;
&lt;li&gt;Real work results: did it make the correct edits, inspect the right context, validate properly, and summarize honestly?&lt;/li&gt;
&lt;li&gt;Browser behavior: did tab selection, sessions, screenshots, artifacts, and page actions feel clear?&lt;/li&gt;
&lt;li&gt;Workflow visibility: did the…&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  For AI Platform Tenants
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Expose private model value inside real developer workflows.&lt;/li&gt;
&lt;li&gt;Connect hosted models, custom endpoints, or account-backed services.&lt;/li&gt;
&lt;li&gt;Offer a practical agent surface that can produce visible work, not only answers.&lt;/li&gt;
&lt;li&gt;Expand from VS Code to browser, CLI, web, and MCP without changing the user&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  VS Code Agent
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Chat-first workspace assistant.&lt;/li&gt;
&lt;li&gt;Model, planner, backend, mode, and thinking controls.&lt;/li&gt;
&lt;li&gt;Sessions and conversation history.&lt;/li&gt;
&lt;li&gt;Workspace file reading, searching, writing, and replacement.&lt;/li&gt;
&lt;li&gt;Active editor context.&lt;/li&gt;
&lt;li&gt;Diagnostics and project inspection.&lt;/li&gt;
&lt;li&gt;Command execution with approval controls.&lt;/li&gt;
&lt;li&gt;Validation, retry, and repair workflows.&lt;/li&gt;
&lt;li&gt;Review banner with changed file count.&lt;/li&gt;
&lt;li&gt;Diff review, approve, reject, and revert actions.&lt;/li&gt;
&lt;li&gt;Activity Log for detailed runtime status.&lt;/li&gt;
&lt;li&gt;Debug backflow levels: None, Simple, or Detail for provider/runtime diagnostics.&lt;/li&gt;
&lt;li&gt;Screenshot validation for UI work.&lt;/li&gt;
&lt;li&gt;RealMemory login and model selection commands.&lt;/li&gt;
&lt;li&gt;Local setup, setup doctor, MCP start/stop, and provider readiness commands.&lt;/li&gt;
&lt;li&gt;Workflow controller settings for system load, max agents, max subagents, evidence requirements, and changed-file attachment.&lt;/li&gt;
&lt;li&gt;Context input controls, compact provider packets, chunked file reads, and lightweight local-model&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Latest changes
&lt;/h2&gt;

&lt;p&gt;Changelog&lt;/p&gt;

&lt;p&gt;Generated by build: 2026-09-03T21:20:35.894Z&lt;/p&gt;

&lt;h2&gt;
  
  
  What is next
&lt;/h2&gt;

&lt;p&gt;It is live at &lt;a href="https://realmemoryai.com" rel="noopener noreferrer"&gt;https://realmemoryai.com&lt;/a&gt;. If you have shipped something similar, I would like to hear what you would have cut.&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
