Help me build an app on a copy of the free Airports dataset from Spatibase (a CMS and API for places), with Spatibase as the app's backend. Read the guide first: https://spatibase.com/agents/quickstart.md Below, "spatibase ..." means "npx --yes spatibase@0.1 ..." (Node 18.3 or newer). The dataset - Airports: https://spatibase.com/datasets/airports/ - A shared, read-only public copy, no key needed. Look at it first: https://api.spatibase.com/delivery/v1/projects/f7f53b91-4e86-4a73-9f50-70f4bff43652/entries?limit=3 - Its typed OpenAPI file: https://api.spatibase.com/delivery/v1/projects/f7f53b91-4e86-4a73-9f50-70f4bff43652/openapi.json - Fields (the keys under "fields" in an entry; the title is the entry's own title): - title (text): Airport name, for example Václav Havel Airport Prague - ident (identifier): OurAirports identifier, unique; mostly the ICAO code, for example LKPR - iata_code (text): IATA code (3 letters); empty for airports without one, for example PRG - icao_code (text): ICAO code (4 characters); may be empty, for example LKPR - gps_code (text): GPS code, for example LKPR - local_code (text): Code used locally - airport_type (choice): large_airport, medium_airport, small_airport or seaplane_base, for example large_airport - scheduled_service (boolean): Has scheduled airline service, for example true - elevation_ft (number): Elevation in feet, for example 1247 - continent (choice): AF, AN, AS, EU, NA, OC or SA, for example EU - country_code (text): ISO 3166-1 alpha-2 country code, for example CZ - country (text): Country name, for example Czechia - region_code (text): ISO 3166-2 region code, for example CZ-10 - region (text): Region name, for example Praha - municipality (text): Town or city served, for example Prague - website (link): Airport website, for example https://www.prg.aero/ - wikipedia (link): Wikipedia article, for example https://en.wikipedia.org/wiki/Václav_Havel_Airport_Prague - Licence: Public domain (https://ourairports.com/data/#data-license). No attribution required; a credit is appreciated. - Good to know about the data: Not for navigation. Provided as is, without warranty. Do not use it for flight planning or anything safety-critical. 1. Ask me what the app is for, unless it is stated under "What to build" at the end. Ask whether I want every airport or only some: one value of a filter field (for example continent = EU) or an area (bbox: minLng,minLat,maxLng,maxLat). A temporary project holds 1,000 entries, so choose a filter or area that fits. 2. Show me a short report and wait for my OK: what you will import and how many entries match (a dry run tells you), the fields of my own you would add, the app you would build and the files it touches, and that the data will be public but unlisted and deleted after 24 hours unless I keep it. 3. Create a temporary project: spatibase create "" --ref dataset-airports Import the dataset into it, a dry run first: spatibase call import_dataset '{"dataset":"airports","filter":{"field":"continent","value":"EU"},"dryRun":true}' Read the counts, then run it again with "dryRun":false. The entries arrive as drafts. spatibase call list_datasets names the fields you can filter by. 4. Add my own fields and data: spatibase describe shows the imported type and its apiKey; write a small model file in .spatibase/ and run spatibase model (it adds missing fields to the existing type); import my own rows if I have a file (spatibase import --type --publish). Then spatibase publish and spatibase verify. 5. Build the app on my project's Content Delivery API: the address that create printed (it ends in /delivery/v1/projects/, not the public copy's id) and its typed OpenAPI file at
/openapi.json. Generate types from that file, never guess field names, keep loading and error states, and show a credit to OurAirports (appreciated, not required). 6. Ask for my email and run spatibase keep , so I can keep the project (it is deleted after 24 hours otherwise). Finish with the live API URL, how many entries were imported and with which filter, what you built and when the project expires.