Rails application shell
Status: Implemented. Every generated Rails application receives these surfaces outside its Scaffolds.
Every generated Rails application receives the same application-wide surfaces outside its Scaffolds. The routes
renderer emits the complete config/routes.rb, and an optional authored Home index replaces the welcome page.
Legal starter pages, a web manifest, and name-derived bookmark icons ship with every application. An authored
application.domain sets only the production mailer host. The generated UI owner owns error-page views
and theme behavior, and Rails Core composition owns the Core files these surfaces replace.
The Plan owner states what Home and bookmark icons mean.
On this page
Routes
The routes renderer owns the complete config/routes.rb. Fixed defaults declare liveness at /up, database readiness
at /ready, privacy and terms pages, error endpoints, the bookmark manifest, and the welcome Home. Admitted Account,
resource, and associated-collection routes follow those declarations with their existing helpers and access behavior.
These defaults come from the Compiler's own template, not from reading or patching Core's routes. Core retains its
standalone routes for its own checks.
The routes renderer emits the complete config/routes.rb from the captured Project and fixed Rails target defaults.
Its own template supplies health, readiness, manifest, legal, error, and Home declarations before the admitted
Account, resource, and associated-collection routes. It does not read or patch Core's starting routes. Core's
companion source retains standalone baseline routes and removes its empty Domain fragment and draw hook. The original
fragment protected declaration order and helper occupancy; neither guarantee requires a second runtime file. The same
complete template drives route-census extraction, with a temporary sentinel marking where the application declarations
begin. Rails engine routes keep their original position after that boundary. The routes
decision (repository-only) preserves the original seam's rationale and this
change's source-proof boundary.
Home
Optional application.home_index targets the selected Entity's admitted Web index with ordinary root "movies#index"
routing. The same action retains its access rules and resource route. Without an authored choice, or when a valid
selection has a disclosed support gap, Home is the welcome page with the consumed Core's starter copy. A realized
selection omits the welcome controller, view, and separate Home locale. The Home
owner records that copy and selection behavior. Error-page Home links
continue to use root_path for either root.
application.home_index resolves to an Entity's input-owned, admitted Scaffold index. The root declaration targets
that same controller action and preserves its guard and scope. It neither changes the resource route nor reorders
navigation. An absent choice keeps the default welcome. When an index is
realized, the task plan marks app/controllers/home_controller.rb, app/views/home/index.html.erb, and
config/locales/home.en.yml as unused when present; composition omits those files and rejects a renderer claiming
them. The current Core archive owns the separate Home locale. These fixed compiler-owned paths are not authored
removal instructions. Core retains its welcome files for standalone checks. An invalid original link rejects import. A
valid selected index lost to support pruning retains the welcome root and records that dependent consequence in the
exact reviewed GapSet.
Legal pages
The legal pages contain editable, attributed starter content. Signup acceptance remains separate from publishing a suitable legal policy; Issue #741 (repository-only) records that work.
Web manifest and bookmark icons
Every application uses Rails' rails/pwa#manifest at /manifest, the complete
app/views/pwa/manifest.json.erb, and the shared layout's manifest link and mobile-web-app-capable metadata.
The manifest uses the translated application name, start_url: "/", scope: "/", and display: "standalone".
The start URL reaches the selected Home action with its ordinary authentication and authorization.
The manifest references the selected public/icon.svg, 192px public/icon-192.png, and 512px public/icon.png.
The layout declares the SVG and PNG favicons and uses the 512px PNG as its Apple touch icon. Manifest colors are
static: fixed dark uses dark; light, auto, and toggle use light. Page theme metadata continues to follow the selected
web mode. Icon artwork stays black on white in every mode.
This small asset and metadata baseline has no Plan switch. Owners replace the public artwork and edit the
application name in config/locales/en.yml; manifest references live in app/views/pwa/manifest.json.erb.
Broader PWA guidance and installed-app qualification are deferred.
Every application retains favicon and home-screen bookmark assets, the manifest route and template, and their layout metadata. The current Plan format has no PWA choice, and no replacement choice or compatibility shim remains. The Plan owner defines this narrower baseline; the Rails profile describes its lowering.
Every application receives a black-on-white bookmark monogram selected from its first trimmed name character.
ASCII A–Z and 0–9 have prepared artwork; lowercase uses uppercase and other initials use a neutral black circle.
The actual application name is preserved. Outlined Inter 4.1 Bold supplies the letters and digits under its SIL
Open Font License. Artwork bounds fit a centered 288-unit square in the 512-unit canvas, within the centered
40%-radius maskable safe zone.
The manifest declares the SVG and both PNGs for any maskable use.
Compilation copies only the selected finished SVG and PNGs. It performs no font parsing or rasterization and emits no catalog, font, or generation framework. The upstream catalog source (repository-only) records the licensed font and maintainer-only Fontkit/Sharp build step. Owners replace ordinary public files after Compilation. Further fonts and colors remain deferred to Issue #877 (repository-only).
Core's request checks retain actual manifest identity, JSON, standalone display, and icon availability/type/size. The companion cleanup removes the synthetic branded-name example and assertions freezing the root URL and scope. Arbitrary authored-name escaping stays in existing Compiler qualification of the real emitted manifest.
Every application selects its manifest and one finished SVG/192px PNG/512px PNG artwork set, independently of authored Appearance. The first trimmed application-name character selects an ASCII A–Z/0–9 monogram, with lowercase mapped to uppercase; other initials use the neutral circle. The application name remains unchanged. Only those selected assets enter the app; Compilation loads no font or rasterizer. The catalog source (repository-only) owns its font license and maintainer build instructions.
Arbitrary application-name escaping belongs in the existing script/compiler_pwa_runtime_smoke qualification of the
emitted manifest. The companion Core cleanup retains useful current-identity, JSON, display, and asset request checks
while removing the hypothetical-name example and assertions freezing start_url and scope to /. The generated
root defaults remain unchanged. This source packet does not establish installed-device behavior; broader PWA scope and
qualification remain deferred.
Application domain
Project optional application.domain into the immutable Compiler input as the admitted DNS hostname. When present,
the Rails renderer replaces only Core's production config.action_mailer.default_url_options[:host]. This supplies
the host used by generated Account verification, password-reset, and unlock links without treating the hostname as a
URL. Core's independent production force_ssl setting controls URL protocol; the authored domain supplies no scheme
or port. An absent domain leaves Core's production environment byte-for-byte unchanged.
This slice does not configure Rails route defaults, config.hosts, canonical redirects, an asset host, or
Action Cable. It does not configure a sender address, credentials, a provider, or deployment. It does not infer DNS
ownership, TLS, host authorization, reachability, or the hostname's suitability for production. It also does not
change iOS identity or native output.
Application domain supplies only the production Action Mailer default host; it does not establish protocol, port, DNS, TLS, route-host, or native-URL behavior.