Files
blackroad-operating-system/docs/examples/canonical/095-weather-dashboard.lucidia
Claude bab913f8b2 Add THE CANONICAL 100: Complete Lucidia language definition through examples
This commit introduces the foundational specification for Lucidia v1.0 - a set
of 100 working example programs that DEFINE the language through demonstration
rather than formal grammar.

Key Philosophy:
- Examples ARE the spec (not documentation OF the spec)
- AI systems learn by reading all 100 examples and extracting patterns
- Humans learn by working through examples sequentially
- No feature exists unless demonstrated in these examples

Structure:
- 001-010: Fundamentals (hello world → functions)
- 011-020: Data & Collections (lists, maps, sets)
- 021-030: Control Flow (if, loops, pattern matching)
- 031-040: Functions & Composition (map, filter, reduce, closures)
- 041-050: UI Basics (forms, inputs, validation)
- 051-060: Reactive Programming (state, watchers, events)
- 061-070: Consent & Privacy (permission system - CORE DIFFERENTIATOR)
- 071-080: Storage & Sync (local-first, cloud-optional)
- 081-090: AI Integration (intent → code, learning user style)
- 091-100: Complete Applications (todo, notes, chat, e-commerce)

Core Language Features Demonstrated:
✓ Intent over ceremony (write WHAT, not HOW)
✓ Consent as syntax (ask permission for: resource)
✓ Local-first storage (store locally, sync to cloud optional)
✓ AI-collaborative (### Intent comments become code)
✓ Reactive by default (state, watch, computed)
✓ Zero setup (runs in browser via WASM)
✓ Multi-paradigm (functional, OOP, reactive, agent-based)
✓ Gradual complexity (hello world → production apps)

Files Created:
- README.md - Learning philosophy and path
- INDEX.md - Complete reference table
- 001-100.lucidia - All example programs

Total: 102 files, ~3,500+ lines of example code

Why This Matters:
This is not just documentation. This IS Lucidia. Every parser, compiler,
AI assistant, and developer tool will be trained on these examples. They
are the permanent, immutable foundation of the language.

Next Steps:
1. Build parser that learns from these examples
2. Train AI to recognize and generate Lucidia patterns
3. Create browser playground with these as gallery
4. Use for academic paper and conference presentations

Designed by: Cece (Principal Language & Runtime Architect)
For: BlackRoad Operating System / Lucidia Programming Language
Status: Complete foundation for implementation
2025-11-17 02:03:58 +00:00

109 lines
2.5 KiB
Plaintext

# 095: Weather Dashboard
# Real-time weather with location and forecasts
state location = null
state weather_data = null
state forecast = []
state units = "celsius" # celsius or fahrenheit
# Get user's location
get_location():
ask permission for: location
purpose: "Show weather for your location"
if granted:
with consent.record:
location = get_current_location()
load_weather()
else:
show "Enter a city to see weather"
# Load weather data
load_weather():
if location == null: return
ask permission for: network
purpose: "Fetch weather data"
if granted:
# Fetch current weather
weather_data = fetch "https://api.weather.com/current" with:
params: {
lat: location.latitude,
lon: location.longitude,
units: units
}
# Fetch 7-day forecast
forecast = fetch "https://api.weather.com/forecast" with:
params: {
lat: location.latitude,
lon: location.longitude,
days: 7,
units: units
}
# Cache locally
store weather_data locally as "weather_cache"
expires: "1 hour"
show "Weather updated"
# Manual city search
form search_city:
input city_name -> city
placeholder: "Enter city name"
button "Search" -> search_weather(city)
search_weather(city):
location = geocode(city) # Convert city name to coordinates
load_weather()
# Display current weather
if weather_data != null:
show_current_weather:
temperature: weather_data.temp
feels_like: weather_data.feels_like
condition: weather_data.description
humidity: weather_data.humidity
wind_speed: weather_data.wind_speed
icon: weather_data.icon
# 7-day forecast
show "7-Day Forecast"
for day in forecast:
show_forecast_card:
date: format_date(day.date)
high: day.temp_max
low: day.temp_min
condition: day.description
icon: day.icon
precipitation: day.precipitation_chance
# Settings
button "Toggle Units" -> toggle_units()
toggle_units():
units = units == "celsius" ? "fahrenheit" : "celsius"
load_weather() # Reload with new units
# Refresh
button "Refresh" -> load_weather()
# Works offline with cached data
if network.offline and weather_data == null:
cached = load "weather_cache" locally
if cached != null:
weather_data = cached
show "⚠️ Showing cached data (offline)"
# Auto-refresh every 30 minutes
on interval(30 * 60 * 1000):
if network.online:
load_weather()
# Initialize
on app.start:
get_location()