UbiCity (the Ubiquitous City of Learning) is a vision for dissolving the boundaries between formal education and urban exploration. This repository contains practical tools to capture, map, and analyze learning experiences that happen outside traditional institutional boundaries.
Instead of waiting for infrastructure, we’re building tools to document urban learning as it happens - creating a corpus of learning experiences that can reveal patterns invisible within traditional educational frameworks.
You have an expansive vision (UbiCity) but need concrete next steps. How do you move from concept to practice without:
-
Infinite scope creep
-
Analysis paralysis
-
Building technology before validating the idea
-
Losing the essence in the implementation
Start with data, not infrastructure. Capture learning experiences using a minimal protocol, then use analysis tools to discover what patterns emerge organically.
-
📋 JSON Schema - Structured format for learning experiences
-
🎯 Capture Tool - CLI for recording experiences in the moment
-
🗺️ Mapper - Analysis engine finding connections and patterns
-
📊 Minimal Viable Protocol - The simplest possible UbiCity instantiation
-
🔍 Export to Voyant - Text analysis integration for deeper insights
cd ubicity
npm install # if needed for dependencies
chmod +x capture.js # make capture tool executableOption 1: Quick capture (30 seconds)
node capture.js quickOption 2: Full capture (2 minutes)
node capture.js fullOption 3: Generate a template to edit
node capture.js template > my-experience.json
= Edit the JSON file, then manually add to ubicity-data/experiences/Want to test if UbiCity works for you? Follow the protocol in MINIMAL_VIABLE_PROTOCOL.md:
-
Week 1: Capture 5 learning experiences in different locations
-
Week 2: Run analysis, look for patterns
-
Week 3: Decide to stop or add one collaborator
-
Week 4: Meet and discuss, capture that collaboration
Success criteria: If you found one unexpected connection and generated one new question, UbiCity works at minimum viable scale.
Every learning experience needs:
{
"learner": {
"id": "who learned"
},
"context": {
"location": {
"name": "where they learned"
}
},
"experience": {
"type": "what kind of learning",
"description": "what they learned"
}
}Add any of these to deepen analysis:
-
Learner background/interests - For finding similar learners
-
GPS coordinates - For spatial mapping
-
Situation/connections - Who else was involved
-
Domains - Disciplinary areas (enables interdisciplinary analysis)
-
Artifacts - Photos, sketches, code created
-
Outcome - Success/failure, new questions, unexpected connections
-
Tags/privacy - Organization and access control
Full schema: schema/learning-experience.json
The mapper provides several analytical lenses:
Find experiences that span multiple domains:
mapper.findInterdisciplinaryConnections()Returns learning moments where different disciplines met, often yielding unexpected insights.
Identify locations with high disciplinary diversity:
mapper.findLearningHotspots()These are places where the city itself facilitates cross-domain learning.
See which disciplines frequently co-occur:
mapper.generateDomainNetwork()Reveals the natural boundaries (or lack thereof) between fields in practice.
Track how individuals' interests evolve:
mapper.getLearnerJourney(learnerId)Shows progression, new domains discovered, questions emerged.
-
Document self-directed learning
-
Find patterns in your interests
-
Justify learning time to yourself/others
-
Create a learning portfolio
-
Track collaborative learning
-
Find intersection of interests
-
Identify productive meeting locations
-
Build shared knowledge maps
-
Study informal learning patterns
-
Analyze urban learning environments
-
Generate papers from captured data
-
Validate educational theories in practice
This repo started as a Zotero → Voyant exporter. The connection:
-
Zotero: Captures research reading and sources
-
UbiCity: Captures experiential learning and practice
-
Voyant: Analyzes text patterns in both
You can export UbiCity experiences to Voyant:
const mapper = new UrbanKnowledgeMapper();
mapper.loadAll();
const corpus = mapper.exportToVoyant();
// Upload corpus to Voyant for text analysisSeriously. Capture data first. Then:
-
Add visualization - Map experiences geographically
-
Add recommendations - "Learners like you also explored…"
-
Add mobile capture - Quick smartphone entry
-
Add social features - Share discoveries
-
Add institutional integration - Course credit, portfolios
But each of these is optional. The core works with just the CLI tools.
This is not a startup. Not a platform. Not a product.
This is infrastructure for a practice - like a yoga mat or a notebook.
UbiCity isn’t something to complete. It’s a continuous process:
-
You capture experiences
-
Patterns emerge
-
You explore those patterns
-
New questions arise
-
You capture more experiences
-
Patterns evolve
The tools here support that cycle. They don’t try to optimize it, gamify it, or monetize it.
-
Learning experiences as verifiable events
-
Safety properties: learner wellbeing, privacy
-
Verification conditions for "successful learning"
-
Learning as commons, not commodity
-
Mutual accountability in public learning
-
Skills-sharing over credentials
-
MVP protocol provides clear phase boundaries
-
Each week of experiment is a phase
-
Natural pause points prevent scope creep
-
Read
MINIMAL_VIABLE_PROTOCOL.md -
Capture one experience right now
-
Decide: 4-week experiment or not?
-
Add visualization (D3.js maps of learning)
-
Create web interface (form + map view)
-
Integrate with Zotero (reading → practice)
-
Write paper: "Formal Verification of Urban Learning Systems"
This is a personal exploration toolkit, but if UbiCity resonates with you:
-
Capture your own experiences
-
Share patterns you discover
-
Extend the tools for your context
-
Write about your experiments
The GPL3 license means you can fork, modify, and share freely.
-
Concept: UbiCity vision from 2017+ work with UAL Creative Communities
-
Implementation: Built on learnings from zotero-voyant-export project
-
Inspiration: Voyant (text analysis), Zotero (research management), and years of trying to formalize the informal
GPL3 - Same as the original zotero-voyant-export project.
Learning should be free as in freedom.