# Realm Atlas > A worldbuilding atlas in the browser: paint the regions of an invented world on a vintage school-atlas sheet, draw rivers, roads and sea lanes, place cities, ports, forts, mines, temples, ruins and landmarks, and get a computed gazetteer. Then a model writes lore for chosen regions and proposes trade routes, ports and border disputes - and every claim it makes is checked against the map. URL: https://realm-atlas.skillsafe.ai/ API tutorial: https://realm-atlas.skillsafe.ai/api.html Sources: two SkillSafe skills - @danjdewhurst/worldbuilding (https://skillsafe.ai/skill/@danjdewhurst/worldbuilding), which shapes the lore lane (people, livelihood, beliefs, trade and quarrels that follow from the land, consistency over novelty), and @jwynia/economic-systems (https://skillsafe.ai/skill/@jwynia/economic-systems), which shapes the trade lane (economies start from resources and geography, trade follows the cheapest route, scarcity and chokepoints create leverage and conflict). ## Who it is for Tabletop game masters building a campaign setting, novelists and short-story writers, students doing a geography or history project on an invented country, conlang and worldbuilding communities that want a shared map with consistent facts. ## What runs free, in the browser - Region painting: click corners on a 1000 x 700 sheet; corners snap to nearby corners and borders so regions tile without gaps. A corner shared by several regions drags them all (Alt-drag detaches it). Midpoint handles add corners - on a shared border, to both regions. - Terrain (plains, forest, hills, mountains, marsh, desert, steppe, jungle, tundra, lake) and climate (polar to tropical, plus highland) per region; political, terrain and climate layers; water-lined coasts, a compass rose, a boxed scale bar. - Rivers drawn source to mouth with a flow arrow; roads, trade roads and sea lanes; dispute markers on shared borders. - The gazetteer, computed from geometry: area in km2 (from the map scale), coast length or "inland", neighbours with shared border length, lakeshores, the rivers that rise in, cross or reach the sea in each region, places and roads. - Checks: overlapping regions, self-crossing outlines, slivers of sea between near-touching regions, tiny regions, unusual terrain/climate pairs, rivers that start at sea, end inland or run uphill (mountains > hills > plains, forest and the rest > marsh > lake and sea), ports away from water, land roads over open sea, sea lanes between inland places, disputes between regions that share no border. - Exports: the atlas as standalone SVG (with the world inside, so it opens again), a printable gazetteer booklet with one page and mini-map per region, the world as JSON (lore included), places as CSV, the gazetteer as Markdown. ## The model lanes (metered, signed-in users) The model receives only the gazetteer facts and the person's seed notes - never the coordinates. - `lore`: an entry for each of up to six chosen regions - 5-7 sentences on people, livelihood, trade, a tension with one neighbour and a landmark tied to a placed marker - plus structured trade partners with routes, the tension and the landmark. Every sentence lists the ids it mentions and states its geographic claims (adjacent, coastal, climate, terrain, river, place, road, lake). The page checks each one and flags a mismatch on the sentence it concerns; it also flags talk of the sea in an inland region. An update run sends the earlier entries and what changed on the map ("now has a coast", "new neighbour R9") for the regions whose facts changed. - `trade`: resources per region, the main flows of goods with their routes, economic pressures, and 2-6 proposed edits - add_road, add_sea_lane, add_port (on a coast or at a river mouth), add_dispute (between neighbours). Each is replayed on a copy of the world: it is shown as fitting, would-add-a-problem, or impossible; fitting ones are drawn as ghosts with Accept. Accepting changes the map, and the lore of the regions it touches is offered for an update. ## Input and output contract Input: a flat JSON object of strings - task, title, seed, scale, regions, places, rivers, roads, checks (JSON-encoded), and for lore: focus (region ids), previous and changes (update runs). Output: one JSON object per the task's contract; see the API tutorial. ## Limits 60 regions, 80 corners per region, 150 places, 40 rivers, 60 roads, 30 disputes. Up to 6 regions of lore per run. Saved worlds go to the person's SkillSafe account, one record per world, capped at 64 KB (geometry is rounded, then thinned, and the record says so).