# Changelog

New features, architectural changes and improvements to AutoFolio.

Release notes are curated from repository history. Dates reflect integration into the main branch; grouped entries are not semantic-version tags. Each entry links to its implementation and current developer guide.


## AutoFolio: the garage, AI, social sharing and appearance

2026-10-23

Everything that landed on 23 October: the v1 boards and the later-release ones, the AI and social features behind their flags, three appearance themes, the QA and audit rounds, performance, the landing page and docs that describe AutoFolio.

On 22 and 23 October the template became AutoFolio, a lifelong garage for current, sold and wished-for cars, in Portuguese (Brazil), English and German. The handoff in `handoff/` sets the product and design; [ADR-0014](/docs/adr/0014-autofolio-on-the-template) maps it onto the template and [ADR-0015](/docs/adr/0015-autofolio-data-model) records the data model: integer money in an append-only ledger, corrections as new entries, the Organization as the household under row-level security, and plate and VIN encrypted ([data model](https://github.com/CarlosZiegler/autofolio/commit/5979dbf)). This entry gathers the day's changes; each feature's guide holds the detail.

## The garage [#the-garage]

- **Vehicle profile, gallery, documents, history and collection.** M-Veiculo shows the car's value with source, date and confidence, its costs over 12 months, the next service and the loan balance ([garage](/docs/features/garage), [commit](https://github.com/CarlosZiegler/autofolio/commit/b1e540f)). M-Galeria keeps up to 50 photos on Free with a cover, and Specs shows plate and VIN masked until the owner asks ([vehicle photos](/docs/features/vehicle-photos), [commit](https://github.com/CarlosZiegler/autofolio/commit/66e8f34)). M-Documentos files private documents behind five-minute links ([vehicle documents](/docs/features/vehicle-documents), [commit](https://github.com/CarlosZiegler/autofolio/commit/189d188)). M-Historico derives a car's timeline from its records ([history](/docs/features/vehicle-history), [commit](https://github.com/CarlosZiegler/autofolio/commit/670b288)). M-Colecao counts every car owned, and the wishlist never counts toward Free's one car ([commit](https://github.com/CarlosZiegler/autofolio/commit/c1b5ebf)).
- **Profile.** Data export (a ZIP of CSVs and a PDF per car, 7 days), account deletion that erases the household's records at once, and the Face ID lock ([data export and erasure](/docs/features/data-export), [commit](https://github.com/CarlosZiegler/autofolio/commit/e255246)).
- **Privacy centre.** One Privacy row opens what we hold (counts per category), what I share with Revoke and Revoke all links, and a consent per purpose recorded with the policy version; a no to AI turns every AI feature off for that User ([privacy centre](/docs/features/privacy)).
- **Delete account with 30 days to change your mind.** Behind `account.deletion-grace`: scheduling signs out every device and revokes passports, showcases and invites at once, each car other people use is deleted with the account or handed to one of them as a History Transfer, signing in shows only Keep my account or Delete now, and the cron tick erases the account after 30 days ([data export and erasure](/docs/features/data-export#deletion-with-a-grace-period), [ADR-0019](/docs/adr/0019-erasure-after-a-grace-period), [commits](https://github.com/CarlosZiegler/autofolio/commit/587ba4b), [5bcf546](https://github.com/CarlosZiegler/autofolio/commit/5bcf546)).
- **Scheduled deletion on the web too.** Settings → Danger zone schedules the deletion with the same per-car choices, a scheduled account signed in on the web sees only Keep my account, Delete now and Sign out, and Members who used the cars are emailed when an account is deleted at once ([data export and erasure](/docs/features/data-export#deletion-with-a-grace-period), [ADR-0019](/docs/adr/0019-erasure-after-a-grace-period)).
- **Sign-in and security.** P-Entrar signs in with a passkey first, then Apple and Google (hidden until the server has their credentials), then email; P-Seguranca gathers passkeys, two-step verification, linked accounts, devices, an email alert for a sign-in on a new device or country, the Face ID lock and a cover for the app switcher; a household can require a passkey or two-step verification before anyone shares ([sign-in and security](/docs/features/sign-in-security), [commits](https://github.com/CarlosZiegler/autofolio/commit/63bbd4e), [1b384a1](https://github.com/CarlosZiegler/autofolio/commit/1b384a1)).
- **Family garage.** Per-car roles (view only, can log expenses, owner) and row-level security that hides ungranted cars ([family garage](/docs/features/family-garage), [commit](https://github.com/CarlosZiegler/autofolio/commit/07a6bbf)).
- **People permissions.** What a person may do with each car is a preset (Co-owner, Can log expenses, Driver, Workshop, Accountant, View only) or a custom matrix of six areas with See, Log and Edit (G-Papeis, G-Permissoes); selling and removing the car stay the owner's. Row-level security hides every area the grant leaves out, so a Driver sees only the amounts they logged; the old roles and the documents switch became presets (#76, [family garage](/docs/features/family-garage)).
- **Temporary access, approvals, handing a car over.** A grant can end at a date (lend the car for three days; a job removes it and tells both sides), what a Member logs can wait for the owner's approval out of every total (rejecting is a correction with the reason), and a car's owner can hand it to another Member, who accepts and becomes its owner (G-Temporario, G-Aprovacao, G-Transferir; #77, [family garage](/docs/features/family-garage)).

## Money [#money]

- **Add expense** with the duplicate warning (RF10), a reason for a lower odometer (RN07) and an offline queue that never saves twice; a receipt photo or a voice note only fills a draft ([expense](/docs/features/expense), [commit](https://github.com/CarlosZiegler/autofolio/commit/8489910), [commit](https://github.com/CarlosZiegler/autofolio/commit/8eb5c49)).
- **Finances, loan, net worth.** M-Gastos totals by category and period; M-Financiamento keeps every balance, and principal is never an expense (RN05); M-Patrimonio shows value minus debt, and a rise is an estimate, never a profit ([loan](/docs/features/loan), [commits](https://github.com/CarlosZiegler/autofolio/commit/fc03a15), [0064c1d](https://github.com/CarlosZiegler/autofolio/commit/0064c1d), [b1529a8](https://github.com/CarlosZiegler/autofolio/commit/b1529a8)).
- **Purchase with a trade-in**, recurring expenses confirmed into the ledger, and spreadsheet import with undo ([acquisition](/docs/features/acquisition), [recurring expense](/docs/features/recurring-expense), [spreadsheet import](/docs/features/spreadsheet-import), [commits](https://github.com/CarlosZiegler/autofolio/commit/1f31491), [8cb58f3](https://github.com/CarlosZiegler/autofolio/commit/8cb58f3), [84811cd](https://github.com/CarlosZiegler/autofolio/commit/84811cd)).
- **M-Insights.** A car's TCO per km or mile (depreciation, running costs, interest and fees) and the cars compared; the same running-cost figure on Finances, the profile and Insights ([insights](/docs/features/insights), [commits](https://github.com/CarlosZiegler/autofolio/commit/d42a93b), [6c7c3d4](https://github.com/CarlosZiegler/autofolio/commit/6c7c3d4)).
- **Reference values.** A provider seam per country and a daily revaluation job; no provider is licensed, so values stay manual ([garage](/docs/features/garage#reference-values-rf38), [commit](https://github.com/CarlosZiegler/autofolio/commit/2dd7fc8)).

## Service [#service]

The Service tab lists reminders by date or distance with the basis of each forecast, records services with items and receipt, suggests a maintenance plan (generic, never called the manufacturer's without its data), and pushes and emails due alerts once per window ([services and reminders](/docs/features/service), [commits](https://github.com/CarlosZiegler/autofolio/commit/97e1038), [8a9b69a](https://github.com/CarlosZiegler/autofolio/commit/8a9b69a), [6de0306](https://github.com/CarlosZiegler/autofolio/commit/6de0306)). The home-screen widget shows the next service ([commit](https://github.com/CarlosZiegler/autofolio/commit/7d2a43a)). Partner workshops verify services, dealers hand over cars by a one-time code, and the partner portal lives at `/partners` ([partners](/docs/features/partners), [commit](https://github.com/CarlosZiegler/autofolio/commit/cf5ee55)).

## Sale and sharing [#sale-and-sharing]

- **Close a sale.** The deal result and the economic result apart, the loan paid off, the car moved to Sold; nothing deleted ([sale](/docs/features/disposal), [commit](https://github.com/CarlosZiegler/autofolio/commit/3007b04)).
- **Passports.** M-Vender and M-Passaporte create field-by-field snapshots behind a 256-bit token; the buyer opens `/p/:token`, revoked links look like unknown ones, and revoking deletes the snapshot ([passports](/docs/features/passport), [commits](https://github.com/CarlosZiegler/autofolio/commit/ebf737f), [feb93ac](https://github.com/CarlosZiegler/autofolio/commit/feb93ac)).
- **History transfer.** The technical history, without money, plate or VIN, offered to the next owner's email ([history transfer](/docs/features/history-transfer), [commit](https://github.com/CarlosZiegler/autofolio/commit/9ccc0a7)).

## AI [#ai]

Each AI feature is behind its own flag, off by default, resolves its model from one registry on TanStack AI, counts against the plan's monthly quota, and sends nothing with a plate, VIN or email ([AI foundation](/docs/features/ai), [ADR-0017](/docs/adr/0017-ai-model-registry-and-quotas), [commit](https://github.com/CarlosZiegler/autofolio/commit/8f819a5)). A model fills drafts the person confirms and never computes a figure the app shows.

- **Cost assistant and copilot cards.** M-Assistente answers through the shared tool catalog; with `ai.genui`, each result is a card that names its source and opens its screen, and an expense draft is saved only in Add expense ([assistant](/docs/features/assistant), [ADR-0018](/docs/adr/0018-copilot-generative-ui), [commits](https://github.com/CarlosZiegler/autofolio/commit/bccc664), [9043d8c](https://github.com/CarlosZiegler/autofolio/commit/9043d8c)).
- **Document scanner.** Fuel receipts, workshop invoices, policies, tax notices, purchase invoices and loan contracts read on the phone into grounded drafts; Shoebox mode queues many ([document scanner](/docs/features/scanner), [commit](https://github.com/CarlosZiegler/autofolio/commit/37a62b3)).
- **Cinematic Studio.** A new scene and light for an ordinary photo, the car's pixels checked against the original, plates blurred, the original kept ([Cinematic Studio](/docs/features/studio), [commit](https://github.com/CarlosZiegler/autofolio/commit/f92204b)).
- **Proactive insights.** A real change on a car (fuel economy, spending, insurance, a service due), last month's summary, and the odometer read from a dashboard photo ([insights](/docs/features/insights#proactive-insights-ai-spec-4), [commit](https://github.com/CarlosZiegler/autofolio/commit/55e2ee8)).
- **Extras.** A sale listing from the passport, search across a car's records, translation beside the original, and a plan read from the owner's manual ([AI extras](/docs/features/ai-extras), [commit](https://github.com/CarlosZiegler/autofolio/commit/92cbee9)).

## Social [#social]

- **Moments and share cards.** Facts the garage already holds (a new car, an anniversary, a distance milestone, a sale, a Studio picture, the collection) become cards made on the phone and shared as files, never uploaded; the launch backlog is listed as seen, never pushed ([moments](/docs/features/moments), [commits](https://github.com/CarlosZiegler/autofolio/commit/727a31e), [42b4c1f](https://github.com/CarlosZiegler/autofolio/commit/42b4c1f)).
- **Showcase links.** A public page of a car or the garage at `/g/:token`, with photos, years and milestones, never prices, plate or VIN; optionally live ([showcase](/docs/features/showcase), [commit](https://github.com/CarlosZiegler/autofolio/commit/4f111f4)).
- **Shared garage.** Invite by a one-time link or QR with the cars and roles chosen first, the people header and the activity line ([family garage](/docs/features/family-garage#invite-by-link-or-qr), [commit](https://github.com/CarlosZiegler/autofolio/commit/e5cb83f)).

The flags `social.moments`, `social.showcase` and `social.invite-link` are on in the dev seed and off in production until QA passes.

## Appearance [#appearance]

Profile → Appearance offers Monochrome (the default), Car colour (tinted by the current car's cover colour, read once on the server) and Warm, in the app and the signed-in web; the passport stays neutral and the showcase takes the colour only if the owner asks ([appearance](/docs/features/appearance), [ADR-0016](/docs/adr/0016-appearance-and-car-colour), [commit](https://github.com/CarlosZiegler/autofolio/commit/9a3a3ed)).

## Quality rounds [#quality-rounds]

- **QA rounds 2–5** fixed what only a device shows: Hermes lacks `formatToParts` and writes numbers in the device's region, so money, numbers and dates now come from per-locale tables in `@autofolio/domain/format`, and a Hermes guard keeps device code off what it lacks; forms open above the tabs; Dynamic Type and VoiceOver fixes on every board ([commits](https://github.com/CarlosZiegler/autofolio/commit/add298a), [cff2fdb](https://github.com/CarlosZiegler/autofolio/commit/cff2fdb), [493c616](https://github.com/CarlosZiegler/autofolio/commit/493c616), [1bed7c0](https://github.com/CarlosZiegler/autofolio/commit/1bed7c0), [aa00bd0](https://github.com/CarlosZiegler/autofolio/commit/aa00bd0), [2cdfa6f](https://github.com/CarlosZiegler/autofolio/commit/2cdfa6f), [c075345](https://github.com/CarlosZiegler/autofolio/commit/c075345)).
- **Audits.** Authorization between cars and nothing identifying in logs, uploads or provider calls; one strict money parser and a queue that keeps unsent writes through a forced sign-out; jobs that page at scale and tests that do not read the wall clock ([observability](/docs/architecture/observability), [commits](https://github.com/CarlosZiegler/autofolio/commit/9bd087f), [f219335](https://github.com/CarlosZiegler/autofolio/commit/f219335), [8f8320c](https://github.com/CarlosZiegler/autofolio/commit/8f8320c)).

- **QA round 6.** The remove-member freeze, the Studio call timeout, the Copilot's sell answer, the scanner's currency and the flows' timing; then the boards' layouts, Dynamic Type at AX5, German and Portuguese copy and VoiceOver labels on the AI, social and appearance screens ([commits](https://github.com/CarlosZiegler/autofolio/commit/7436c4e), [3a51dcc](https://github.com/CarlosZiegler/autofolio/commit/3a51dcc)).
- **QA round 7.** The Studio keeps faithful scenes again: the fidelity check scores the car's edges and details instead of its brightness, so a relit car passes and another car fails, and a request with no kept scene ends after one round instead of spending three more calls ([Cinematic Studio](/docs/features/studio), [commit](https://github.com/CarlosZiegler/autofolio/commit/4c68463)). Pickers and confirms open only once the sheet before them is gone, P-Excluir pins its pills above the tabs, and a transfer offer names its car ([commit](https://github.com/CarlosZiegler/autofolio/commit/30a1875)). Dev links reuse the seed session, Your garages switches households and a new sign-in reopens the last one, the P- and G- boards match their drawings, and Dynamic Type at AX5 stacks instead of breaking words ([commit](https://github.com/CarlosZiegler/autofolio/commit/2d05d33)).

## Performance [#performance]

- **Mobile.** A 21 % smaller JS bundle, lists on FlashList and the language read before the first frame ([commit](https://github.com/CarlosZiegler/autofolio/commit/b2e1c7c)). Gallery and Moments tiles load a stored, upright 384 px preview instead of the original photo (a 12 MP tile goes from 3.26 MB to 194 KB). Measured on the simulator: FlashList stays, because LegendList mounted 20–50 ms faster but showed blank frames, slower frames and more memory on long lists; inlineRequires stays off, because it did not shorten the start ([`docs/measurements/2026-10-23-mobile-lists-startup.md`](https://github.com/CarlosZiegler/autofolio/blob/main/docs/measurements/2026-10-23-mobile-lists-startup.md), [vehicle photos](/docs/features/vehicle-photos), [commit](https://github.com/CarlosZiegler/autofolio/commit/e5144e5)).
- **Web.** The entry JS drops from 172 to 106 KB gzip; Lighthouse mobile with real throttling goes from 93 to 98 on the site and from 79 to 94–99 on the dashboard ([commit](https://github.com/CarlosZiegler/autofolio/commit/75a40c1)).
- **API round trips.** Insights, Moments, the garage, net worth, recurring expenses and the copilot's "upcoming" read once for the whole household instead of per car or in series, and a read that finds nothing new writes nothing. M-Insights asks once (`insights.overview`), and the morning Moments and insights jobs keep their place for the day instead of rescanning every household each tick. Per-screen numbers are in [`docs/measurements/2026-10-23-api-round-trips.md`](https://github.com/CarlosZiegler/autofolio/blob/main/docs/measurements/2026-10-23-api-round-trips.md) (#72).

## Web and docs [#web-and-docs]

A new product landing page at `/` tells the garage's story with the new AI, social and appearance features, in Portuguese, English and German ([commit](https://github.com/CarlosZiegler/autofolio/commit/e4b70a6)). The site, privacy page, auth and account pages use the AutoFolio style, and the template's Todos, posts and profile demo pages are gone; the task API and MCP tools remain ([commits](https://github.com/CarlosZiegler/autofolio/commit/edde7d5), [7c666c6](https://github.com/CarlosZiegler/autofolio/commit/7c666c6)).

The README, [`CONTEXT.md`](https://github.com/CarlosZiegler/autofolio/blob/main/CONTEXT.md) and these docs now describe AutoFolio: the glossary covers the AI, social and appearance words, the [features index](/docs/features) lists every guide by area, the [decisions](/docs/adr) list ADR-0014 to 0018, and the AI and social specs say what is built and what is deferred. Template-only plans and examples moved to [`docs/archive/template`](https://github.com/CarlosZiegler/autofolio/blob/main/docs/archive/template/README.md). Deployment and CI stay documented but unused while the project runs locally ([local setup](/docs/development/setup)).

A review of about 30 competitors ranks 15 feature opportunities and the ones to avoid ([`docs/research/2026-10-competitors.md`](https://github.com/CarlosZiegler/autofolio/blob/main/docs/research/2026-10-competitors.md)).


## Account preference

2026-10-22

Signed-in Users read and change their locale, main currency, units and reminder channels; the data region is set once and shown read-only.

The API gains `accountPreference.get` and `accountPreference.update` for the AutoFolio profile. The first read creates the User's row from the device locale (Portuguese → BRL, km, l, region br; German → EUR, km, l, region eu; anything else → USD, mi, gal, region us), once, even when two reads race. An update changes only the choices it names and refuses the data region, which moving is a support process.

- [Account preference](/docs/features/account-preference)


## Purchase of a car

2026-10-22

Members record a car's purchase price, date, costs, down payment and amount financed, fill them in later, and correct them with a reason; the amount financed opens the car's Loan.

The API gains `acquisition.get` and `acquisition.save` for M-Compra. Saving writes the purchase header, the price and cost ledger entries, the Loan the amount financed opens, the invoice and the ownership period's start in one transaction. Every field may be filled in later without a reason; changing a recorded value needs one and adds correction rows, never an update. The domain package adds `timeOwned` for "Time owned: 3 years, 4 months", and the dev seed leaves the Corolla Cross without a purchase so the garage shows its next step.

- [Acquisition](/docs/features/acquisition)


## Earlier updates

- 2026-10-22: [Expenses and odometer readings](/docs/changelog/2026-10-22-expense)
- 2026-10-22: [AutoFolio garage and catalog API](/docs/changelog/2026-10-22-garage-and-catalog)
- 2026-10-22: [Garage and Add vehicle in the app](/docs/changelog/2026-10-22-garage-screens)
- 2026-10-22: [Profile & data screen](/docs/changelog/2026-10-22-profile-screen)
- 2026-10-22: [Services and reminders](/docs/changelog/2026-10-22-service-reminders)
- 2026-10-22: [Site QA fixes](/docs/changelog/2026-10-22-site-qa-fixes)
- 2026-10-22: [AutoFolio welcome and sign-in](/docs/changelog/2026-10-22-welcome-and-sign-in)
- 2026-10-19: [Agent skills from upstream and the /pr template](/docs/changelog/2026-10-19-agent-skills-update)
- 2026-10-19: [Ponytail from the official plugin](/docs/changelog/2026-10-19-ponytail-plugin)
- 2026-10-17: [One folder per backend feature, tagged errors and written rules](/docs/changelog/2026-10-17-backend-structure)
- 2026-10-17: [One folder per mobile feature, and the API aliases are gone](/docs/changelog/2026-10-17-mobile-structure)
- 2026-10-17: [The web app is organized by feature, like the backend](/docs/changelog/2026-10-17-web-structure)
- 2026-10-16: [Auth and tenant security fixes](/docs/changelog/2026-10-16-auth-and-security-fixes)
- 2026-10-16: [Database, Worker and web performance](/docs/changelog/2026-10-16-performance-and-placement)
- 2026-10-16: [Row-level security per Organization](/docs/changelog/2026-10-16-row-level-security)
- 2026-10-15: [AI assistant and one tool catalog](/docs/changelog/2026-10-15-assistant-and-agent-tools)
- 2026-10-15: [Dependency round, i18next fix and ReUI controls](/docs/changelog/2026-10-15-dependency-round-and-reui)
- 2026-10-15: [Developer documentation and changelog](/docs/changelog/2026-10-15-developer-docs-and-changelog)
- 2026-10-15: [Documents and large uploads](/docs/changelog/2026-10-15-documents-and-large-uploads)
- 2026-10-15: [Landing page redesign](/docs/changelog/2026-10-15-landing-redesign)
- 2026-10-15: [Landing sections and project skills](/docs/changelog/2026-10-15-landing-sections-and-project-skills)
- 2026-10-14: [Trace and code block primitives](/docs/changelog/2026-10-14-trace-and-code-blocks)
- 2026-10-13: [TanStack Start 1.0, OG images and durable imports](/docs/changelog/2026-10-13-start-og-and-imports)
- 2026-10-12: [Payments, native screens and a new landing page](/docs/changelog/2026-10-12-payments-and-native-experience)
- 2026-10-03: [Runtime and recovery hardening](/docs/changelog/2026-10-03-runtime-and-recovery)
- 2026-09-25: [Authentication foundations and performance](/docs/changelog/2026-09-25-auth-and-performance)
- 2026-09-24: [Platform dependency alignment](/docs/changelog/2026-09-24-platform-dependencies)
- 2026-09-03: [oRPC and Drizzle upgrades](/docs/changelog/2026-09-03-typed-api-upgrade)
- 2026-08-25: [Typed domain operations and a real dashboard](/docs/changelog/2026-08-25-typed-domain-and-dashboard)
- 2026-08-24: [Agent connections and native account security](/docs/changelog/2026-08-24-agent-connections-and-account-security)
- 2026-08-13: [Cloudflare email and shared UI](/docs/changelog/2026-08-13-email-and-ui)
- 2026-07-30: [An enforced client/server boundary](/docs/changelog/2026-07-30-client-boundary)
- 2026-07-24: [Native interface foundations](/docs/changelog/2026-07-24-native-foundation)
- 2026-07-13: [Administration and data workflows](/docs/changelog/2026-07-13-admin-and-data-workflows)
- 2026-06-10: [Setup, storage and localization](/docs/changelog/2026-06-10-setup-storage-and-i18n)
