# City Portal - A STEAM Club Project > [!NOTE] > Everything described underneath is the theoretical goal of the project - > certainly not the state it's in, and probably not the state it will ever be in... --- Imagine, in the city of the future: a single, unified digital layer connecting every source of urban knowledge. **City Portal** is that layer - an open, extensible platform where **all data, all events, all locations** are accessible in one place. City Portal exposes a **GraphQL API** that provides **free read access** to the city’s datasets - from transportation networks to local events, from environmental sensors to cultural archives. Anyone can build on it: dashboards, analytics tools, or public displays that bring the city to life. Certain data domains (e.g. weather, utilities, public safety) are writable only by **authorized city devices**, ensuring authenticity to maintain the City Portal's integrity. Beyond data aggregation, City Portal aims to become a **platform for experimentation**. Students, researchers, artists, and engineers can collaborate through the same interface to: * Build interactive maps, visualizing live data feeds * Integrate IoT sensors and public devices * Run simulations and predictive models * Develop mobile or AR applications using open datasets * Create educational experiences around real urban systems The project promotes **STEAM learning** by mixing science, technology, engineering, art, and mathematics into one practical challenge: making cities more understandable, efficient, and inclusive through data. City Portal is fully **open source**, community-driven, and designed for adaptability. Each deployment in a different city would form part of a broader network of civic APIs - **a group of connected cities**, able to exchange verified data to form a digital ecosystem of urban knowledge. The main mission of City Portal is to be a framework for **digital citizenship**, where information is treated as a shared resource and every resident, developer, or policymaker can take part in shaping the city’s future. ## Run locally Use `docker compose` or `podman compose` at the project root. Then, `cd` into `backend/` and type `cargo run`. Cargo is not currently part of the compose as it has to recompile everything every time, which is a massive pain.