- Introduction
- The Problem
- The Solution
- Forge Theory Foundation
- Core Concepts
- Architecture
- Getting Started
- User Guide
- Technical Deep Dive
- Use Cases
- API Reference
- Roadmap
- Contributing
- License
SpatialPod is a revolutionary approach to spatial computing that treats digital spaces not as static containers, but as living, breathing formations that emerge from simple particle interactions.
Instead of forcing the physical world into an artificial grid of cubes or fixed geometries, SpatialPod lets you create flexible, organic digital spaces that naturally conform to how humans actually experience the world.
- Seeds grow into pods → Natural lifecycle
- Pods protect what's inside → Privacy & ownership
- Pods are portable → Your space, anywhere
- Pods are self-contained → Independent but connectable
SpatialPod is the first practical application of Forge Theory - a framework demonstrating how complex systems emerge from simple rules. Every pod is a particle system where boundaries, content organization, and network connections all emerge naturally from fundamental interactions.
- Fixed Grids: Dividing the world into uniform cubes ignores the organic nature of real spaces
- Static Containers: Traditional location-based systems use rigid boundaries that don't adapt
- Point-Based Thinking: Everything reduced to pins on a map loses spatial richness
- No Natural Lifecycle: Digital artifacts persist forever or disappear arbitrarily
- Artificial Curation: Manual organization instead of emergent structure
- Organic (restaurants have patios, buildings have floors)
- Flexible (gatherings expand and contract)
- Contextual (day vs night, summer vs winter)
- Living (popular places thrive, abandoned ones fade)
Particle-Based Formations where digital experiences emerge from simple rules:
Anchor Particles → Influence Fields → Emergent Boundaries → Living Spaces
Key Innovations:
- Emergent Geometry: Boundaries form naturally from particle fields
- Energy Economy: Popular pods gain energy, unused ones fade
- Self-Organization: Content finds optimal positions automatically
- Network Formation: Connections emerge from actual usage patterns
- Adaptive Boundaries: Pods reshape based on context and activity
Particle Properties:
- Position (x, y)
- Velocity (vx, vy)
- Charge (attraction/repulsion)
- Energy (persistence/influence)
- Mass (resistance to forces)Particle Interactions:
- Charge-based forces (attract/repel)
- Energy field generation
- Orbital mechanics
- Natural decayEmergent Properties:
- Organic boundaries
- Content organization
- Pod networks
- Spatial hierarchies
- Usage patternsSpatialPod demonstrates the Mavric Pattern (named after your observation of consistent three-layer architectures across domains):
- Foundation: Particles with basic properties
- Interaction: Forces between particles
- Emergence: Complex spatial experiences
This pattern appears throughout nature:
- Physics: Quarks → Atoms → Chemistry
- Biology: Cells → Tissues → Organisms
- Social: Individuals → Communities → Cultures
- SpatialPod: Particles → Fields → Experiences
The fundamental building blocks of every pod.
Types:
- Anchor Particles: Define the pod's spatial structure
- Content Particles: Hold digital assets (photos, audio, AR objects)
- Connection Particles: Link related pods together
Properties:
{
position: Vector2D, // Location in space
velocity: Vector2D, // Movement dynamics
charge: float, // Attraction/repulsion (-1 to 1)
energy: float, // Influence strength (0 to 1)
mass: float, // Resistance to forces
type: string // 'anchor', 'content', 'connection'
}Each particle generates a field of influence that decreases with distance.
Field Calculation:
influence = charge * energy * (1 - distance/radius)²Multiple particles create overlapping fields that combine to define the pod's boundary.
Rather than defining fixed shapes, boundaries emerge from where influence field strength crosses a threshold.
Boundary Algorithm:
- Cast rays from pod center outward
- Calculate field strength along each ray
- Mark where strength crosses threshold
- Connect points to form organic boundary
Result: Boundaries that:
- Conform to actual spaces (rooms, buildings)
- Adapt to particle configuration
- Blur naturally at edges
- Reshape dynamically
Pods require energy to persist, creating natural lifecycles.
Energy Sources:
- Initial creator investment
- Visitor engagement
- Content additions
- Community reinforcement
Energy Drains:
- Time-based decay
- Spatial coverage maintenance
- Complexity overhead
Energy Effects:
High Energy (>80):
- Increased influence range
- Enhanced content quality
- Strong discoverability
Medium Energy (30-80):
- Normal operation
- Standard visibility
Low Energy (<30):
- Reduced visibility
- Boundary shrinking
- Content degradation
Critical (<10):
- Dormant state
- Minimal presence
- Low-resolution onlyContent particles don't need manual placement - they find optimal positions through physics.
Organization Mechanics:
- Content orbits pod center
- Repels other content (spacing)
- Attracted to relevant anchor points
- Clusters by type/relationship
- Visibility based on user context
Emergent Patterns:
- Related photos naturally group
- Audio guides position near relevant areas
- AR objects find optimal viewing angles
- Text annotations cluster logically
Connections between pods form naturally based on:
Connection Factors:
- Spatial proximity
- Content similarity
- Creator relationships
- User traversal patterns
- Shared tags/themes
Network Emergence:
- Popular routes strengthen over time
- Unused connections decay naturally
- Clusters form around themes
- Discovery paths emerge organically
┌─────────────────────────────────────────────┐
│ SpatialPod Forge System │
├─────────────────────────────────────────────┤
│ │
│ ┌──────────────┐ ┌─────────────────┐ │
│ │ Forge Engine │◄────►│ Particle System│ │
│ └──────────────┘ └─────────────────┘ │
│ │ │ │
│ │ │ │
│ ┌──────▼──────────────────────▼─────────┐ │
│ │ Pod Management │ │
│ │ - Creation & Lifecycle │ │
│ │ - Energy Economy │ │
│ │ - Boundary Calculation │ │
│ └────────────────────────────────────────┘ │
│ │ │ │
│ ┌──────▼──────┐ ┌───────▼────────┐ │
│ │ Renderer │ │ Interaction │ │
│ │ │ │ Controller │ │
│ └─────────────┘ └─────────────────┘ │
│ │
└─────────────────────────────────────────────┘
class Vector2D {
constructor(x, y)
add(vector) // Vector addition
subtract(vector) // Vector subtraction
multiply(scalar) // Scalar multiplication
length() // Magnitude
normalize() // Unit vector
distanceTo(vector) // Distance calculation
}class SpatialParticle {
constructor(position, type)
applyForce(force) // Apply physics force
update(damping) // Update position/velocity
draw(ctx, showEnergy) // Render particle
}class ContentParticle extends SpatialParticle {
constructor(position, contentType, data)
updateOrbit() // Orbital mechanics
// contentType: 'photo', 'audio', 'text', 'ar_object'
}class ForgePod {
// Core
constructor(centerPosition, name)
// Particles
createInitialParticles(center)
addContentParticle(type, data)
// Physics
calculateInfluenceField(testPoint)
calculateBoundary(resolution)
applyParticleForces()
// Lifecycle
update()
draw(ctx, showField)
// Utility
getCenter()
containsPoint(point)
}class ForgeEngine {
constructor(canvas)
// Pod Management
createPod(position)
selectPod(pod)
deletePod(pod)
// Interaction
handleClick(event)
handleMouseDown(event)
handleMouseMove(event)
handleMouseUp(event)
// Rendering
update()
draw()
drawPodConnections()
// Animation
animate()
}- Open the HTML file in any modern browser (Chrome, Firefox, Safari, Edge)
- Click anywhere on the canvas to create your first pod
- Watch as particles form and a boundary emerges
- Experiment with the controls to tune the physics
This is a single-file application with zero dependencies:
- No npm install
- No build process
- No server required
- Just open and run!
- Modern web browser with HTML5 Canvas support
- JavaScript enabled
- Recommended: Desktop/laptop for best experience
- Works on mobile (touch support included)
Left Panel - Forge Controls:
- Mode selection (Create/Edit/View)
- Physics parameters
- Action buttons
- Instructions & legend
Center Panel - Canvas:
- Interactive visualization
- Pod rendering
- Particle display
- System statistics
Right Panel - Pod Management:
- List of active pods
- Selected pod details
- Content management
- Pod deletion
Purpose: Create new pods
How to Use:
- Click anywhere on canvas
- New pod spawns with particle formation
- Boundary emerges automatically
- Pod appears in right panel
Tips:
- Pods can overlap (they'll form connections)
- Click in different areas to spread pods out
- Each pod starts with 8 anchor particles (adjustable)
Purpose: Reshape existing pods
How to Use:
- Switch to Edit mode
- Click and drag any particle
- Watch boundary reshape in real-time
- Release to finalize position
Tips:
- Drag particles apart to expand boundary
- Group particles together to shrink boundary
- Create asymmetric shapes for irregular spaces
- Watch the influence field update live
Purpose: Select and inspect pods
How to Use:
- Switch to View mode
- Click inside any pod to select it
- View details in right panel
- Click outside to deselect
Tips:
- Selected pods highlight in green
- Energy bar shows pod health
- Content list shows all attached media
- Name pods for easy identification
Controls how many anchor particles form the pod structure.
- Low (3-5): Simple, compact boundaries
- Medium (6-10): Balanced, organic shapes
- High (11-20): Complex, detailed boundaries
Use Case:
- Small spaces (bench, statue) → Low count
- Rooms, buildings → Medium count
- Large areas (parks, plazas) → High count
How far each particle's influence extends.
- Small (<50): Tight, concentrated pods
- Medium (50-100): Standard coverage
- Large (>100): Expansive areas
Use Case:
- Precise locations → Small radius
- Room-sized spaces → Medium radius
- Campus/park areas → Large radius
Field strength required to form boundary edge.
- Low (0.1-0.3): Large, fuzzy boundaries
- Medium (0.3-0.5): Balanced edges
- High (0.5-0.9): Tight, defined boundaries
Use Case:
- Ambient experiences → Low threshold
- Standard pods → Medium threshold
- Precise boundaries → High threshold
How fast pods lose energy over time.
- None (0): Permanent pods
- Slow (0.001-0.01): Gradual fade
- Fast (0.02-0.05): Ephemeral experiences
Use Case:
- Permanent landmarks → No decay
- Long-term memories → Slow decay
- Temporary events → Fast decay
Controls attraction/repulsion between particles.
- Negative: Particles repel (expansive)
- Zero: Neutral (stable)
- Positive: Particles attract (compact)
Use Case:
- Tight clusters → Positive charge
- Balanced distribution → Neutral
- Spread out formations → Negative charge
Creates a pod at random position near canvas center.
Adds content particle to selected pod.
Content Types:
- 📷 Photo
- 🎵 Audio
- 📝 Text
- 🎨 AR Object
Content automatically finds optimal position and begins orbiting.
Toggles physics simulation on/off.
When Active:
- Particles respond to forces
- Boundaries update dynamically
- Content orbits
- Energy decays
When Paused:
- Everything frozen
- Good for inspection
- Take screenshots
- Precise editing
Toggles influence field visualization.
Shows:
- Color-coded field strength
- Gradient intensity
- Overlap areas
- Threshold boundaries
Color Guide:
- Blue/Cyan: Low influence
- Green/Yellow: Medium influence
- Yellow/Orange: High influence
Removes selected pod permanently.
Warning: Cannot be undone!
Active Pods: Total number of pods in system
Total Particles: All particles across all pods
System Energy: Combined energy of all pods
FPS: Rendering performance (target: 60)
// Coulomb-like force between particles
force = (charge1 * charge2) / (distance²) * strength
// Applied to velocity
acceleration = force / mass
velocity += acceleration
position += velocity
velocity *= damping // Friction/air resistancefunction calculateInfluenceField(testPoint) {
let totalInfluence = 0;
for (particle of anchorParticles) {
distance = testPoint.distanceTo(particle.position);
if (distance < influenceRadius) {
// Inverse square law with falloff
influence = particle.charge * particle.energy *
pow(1 - distance / influenceRadius, 2);
totalInfluence += influence;
}
}
return totalInfluence;
}function calculateBoundary(resolution = 32) {
points = [];
center = getCenter();
for (i = 0; i < resolution; i++) {
angle = (2π * i) / resolution;
// Ray march from center outward
for (radius = 10; radius < maxRadius; radius += 5) {
testPoint = center + Vector2D(cos(angle), sin(angle)) * radius;
influence = calculateInfluenceField(testPoint);
if (influence >= boundaryThreshold) {
foundBoundary = true;
} else if (foundBoundary) {
points.add(testPoint);
break;
}
}
}
return points;
}class ContentParticle {
updateOrbit() {
// Increment orbital angle
this.orbitAngle += this.orbitSpeed;
// Calculate target position
targetX = attractionPoint.x + cos(orbitAngle) * orbitRadius;
targetY = attractionPoint.y + sin(orbitAngle) * orbitRadius;
// Smooth interpolation toward target
this.position.x += (targetX - this.position.x) * 0.1;
this.position.y += (targetY - this.position.y) * 0.1;
}
}Variables:
orbitRadius: Distance from center (30-50px)orbitAngle: Current angle in orbitorbitSpeed: Angular velocity (0.02-0.04 rad/frame)
Result: Content particles orbit smoothly while maintaining spacing.
function calculateConnectionStrength(pod1, pod2) {
// Factors contributing to connection
// 1. Spatial proximity (closer = stronger)
distance = pod1.center.distanceTo(pod2.center);
spatialAffinity = max(0, 1 - distance / maxConnectionDistance);
// 2. Content similarity (similar = stronger)
sharedContent = intersection(pod1.content, pod2.content);
contentAffinity = sharedContent.length / max(pod1.content.length, pod2.content.length);
// 3. Traversal patterns (often visited together = stronger)
coVisits = getUserTraversalData(pod1, pod2);
traversalAffinity = coVisits / totalVisits;
// Combined strength
return (spatialAffinity + contentAffinity + traversalAffinity) / 3;
}function evolveConnections() {
for (connection of connections) {
if (connection.traversalCount > threshold) {
// Strengthen frequently used connections
connection.strength *= 1.1;
} else {
// Decay unused connections
connection.strength *= 0.99;
}
// Remove dead connections
if (connection.strength < minStrength) {
connections.remove(connection);
}
}
}For production deployment with many pods:
class SpatialIndex {
// Quad-tree for fast spatial queries
insert(pod) {
bounds = pod.getBoundingBox();
this.quadTree.insert(bounds, pod);
}
queryRegion(x, y, radius) {
// O(log n) instead of O(n)
return this.quadTree.queryCircle(x, y, radius);
}
}function determineLOD(pod, userDistance) {
if (userDistance > 100) {
return 'preview'; // Low-res thumbnail
} else if (userDistance > 20) {
return 'medium'; // Standard quality
} else {
return 'full'; // High-resolution
}
}// Don't recalculate boundary every frame
let frameCount = 0;
function update() {
frameCount++;
// Update particles every frame
updateParticles();
// Recalculate boundaries every 3 frames
if (frameCount % 3 === 0) {
recalculateBoundaries();
}
// Update connections every 10 frames
if (frameCount % 10 === 0) {
updateConnections();
}
}Scenario: Preserve meaningful moments in physical spaces
Example:
engagement_pod = new ForgePod(restaurantLocation, "Our Engagement");
engagement_pod.addContent('photo', proposalMoment);
engagement_pod.addContent('audio', proposalStory);
engagement_pod.addContent('ar_object', ringReplica);
engagement_pod.permissions = 'family_only';
engagement_pod.lifespan = 'permanent';Features:
- Boundary conforms to actual restaurant space
- Content orbits around meaningful locations
- Energy reinforced by revisits
- Shared with family members only
Scenario: Construction site documentation and coordination
Example:
construction_pod = new ForgePod(buildingSite, "Tower A Construction");
construction_pod.addContent('documents', blueprints);
construction_pod.addContent('3d_models', architecturalDesign);
construction_pod.addContent('sensor_data', liveFeed);
construction_pod.permissions = 'team_and_contractors';
construction_pod.lifespan = 'project_duration';Features:
- Boundary matches building footprint
- Documents accessible at relevant areas
- Live sensor data integration
- Team collaboration enabled
- Auto-expires after project completion
Scenario: Museum audio tour with AR reconstructions
Example:
museum_tour = new PodNetwork("Ancient Egypt Exhibition");
for (exhibit of exhibits) {
exhibit_pod = new ForgePod(exhibit.location, exhibit.name);
exhibit_pod.addContent('ar_experience', historicalReconstruction);
exhibit_pod.addContent('audio_guide', curatorCommentary);
exhibit_pod.addContent('interactive', exhibitQuiz);
exhibit_pod.permissions = 'public';
museum_tour.addPod(exhibit_pod);
}
// Pods auto-connect based on tour flow
museum_tour.calculateOptimalPath();Features:
- Each exhibit gets its own pod
- AR content triggered by proximity
- Network creates suggested tour path
- Public accessibility
- Engagement tracked for curation
Scenario: Store-specific product AR placement
Example:
store_pod = new ForgePod(storeLocation, "Fashion Boutique AR");
for (section of storeSections) {
section_pod = new ForgePod(section.location, section.name);
for (product of section.products) {
product_content = section_pod.addContent('ar_product', {
model: product.3dModel,
info: product.details,
price: product.price,
tryOn: product.arTryOn
});
}
store_pod.addChild(section_pod);
}Features:
- Hierarchical pod structure
- Product AR appears at relevant locations
- Virtual try-on capabilities
- Energy reflects product popularity
- Automatic content organization
Scenario: Festival with multiple stages and areas
Example:
festival_pod = new ForgePod(festivalGrounds, "Summer Music Fest 2025");
// Main stage
main_stage = festival_pod.addChild("Main Stage");
main_stage.addContent('schedule', performanceSchedule);
main_stage.addContent('live_stream', stageFeed);
// Food court
food_court = festival_pod.addChild("Food Court");
for (vendor of vendors) {
vendor_pod = food_court.addChild(vendor.name);
vendor_pod.addContent('menu', vendor.menu);
vendor_pod.addContent('wait_time', vendor.queueData);
}
// Set temporal boundaries
festival_pod.activeTime = {
start: "2025-07-15T12:00:00Z",
end: "2025-07-15T23:00:00Z"
};Features:
- Hierarchical organization
- Real-time data integration
- Temporal activation
- Crowd flow optimization
- Post-event memory preservation
Scenario: Campus-wide learning experiences
Example:
biology_trail = new PodNetwork("Campus Ecology Trail");
for (location of ecosystemLocations) {
location_pod = new ForgePod(location.coords, location.name);
location_pod.addContent('ar_overlay', speciesIdentification);
location_pod.addContent('interactive_quiz', ecologyQuestions);
location_pod.addContent('data_collection', studentObservations);
location_pod.addContent('expert_commentary', professorInsights);
biology_trail.addPod(location_pod);
}
// Create learning progression
biology_trail.sequenceByDifficulty();Features:
- Outdoor classroom integration
- Interactive learning modules
- Student contributions
- Progress tracking
- Faculty oversight
Scenario: Property tours with contextual information
Example:
property_pod = new ForgePod(propertyLocation, "123 Main St");
// Exterior pod
exterior = property_pod.addChild("Exterior");
exterior.addContent('360_photo', exteriorView);
exterior.addContent('ar_renovation', potentialChanges);
// Interior pods per room
for (room of rooms) {
room_pod = property_pod.addChild(room.name);
room_pod.geometry = Shell(room.boundaries);
room_pod.addContent('dimensions', room.measurements);
room_pod.addContent('ar_furniture', furnishingOptions);
}
// Neighborhood context
neighborhood = property_pod.addChild("Neighborhood");
neighborhood.addContent('schools', nearbySchools);
neighborhood.addContent('transit', publicTransit);
neighborhood.addContent('amenities', localAmenities);Features:
- Room-specific information
- AR visualization of changes
- Neighborhood integration
- Virtual staging
- Buyer engagement tracking
// Basic pod creation
const pod = new ForgePod(
centerPosition, // Vector2D
name // String
);
// With custom parameters
pod.influenceRadius = 120;
pod.boundaryThreshold = 0.4;
pod.decayRate = 0.005;// Add anchor particle
const particle = new SpatialParticle(
position, // Vector2D
'anchor' // Type
);
pod.anchorParticles.push(particle);
// Add content
const content = pod.addContentParticle(
'photo', // Type
'vacation_sunset.jpg' // Data
);
// Set particle properties
particle.charge = 0.8;
particle.energy = 1.0;
particle.mass = 1.5;// Get pod center
const center = pod.getCenter();
// Check if point is inside
const isInside = pod.containsPoint(testPoint);
// Get all particles
const allParticles = [
...pod.anchorParticles,
...pod.contentParticles
];
// Calculate influence at point
const influence = pod.calculateInfluenceField(point);// Check energy level
if (pod.energy < 30) {
console.log("Pod is fading!");
}
// Boost energy
pod.energy = Math.min(100, pod.energy + 20);
// Set decay rate
pod.decayRate = 0.01; // 1% per frame// Draw pod
pod.draw(ctx, showField);
// Draw with custom style
ctx.strokeStyle = '#custom';
pod.drawBoundary(ctx);
// Show influence field
pod.drawInfluenceField(ctx, opacity);// Create network
const network = new PodNetwork("My Network");
// Add pods
network.addPod(pod1);
network.addPod(pod2);
// Calculate connections
network.calculateConnections();
// Get shortest path
const path = network.shortestPath(pod1, pod2);- Core particle system
- Emergent boundary calculation
- Energy economy
- Content organization
- Basic UI/UX
- Single-file deployment
- Advanced geometries (3D, shells, paths)
- Persistent storage (localStorage, IndexedDB)
- Import/export functionality
- Mobile optimization
- Touch gesture support
- Collision detection between pods
- Multi-user editing
- Real-time synchronization
- Permission system
- Sharing mechanisms
- Comment threads
- Version history
- Auto-boundary suggestion
- Content recommendation
- Usage pattern analysis
- Optimal network formation
- Predictive energy management
- Smart content organization
- GPS/geolocation integration
- AR device support (ARKit, ARCore)
- Sensor data ingestion
- External API connections
- Plugin architecture
- Developer SDK
- Cloud deployment
- Distributed architecture
- Global pod network
- Cross-platform apps
- Enterprise features
- Marketplace ecosystem
// Pods that activate at specific times
pod.schedule = {
activeHours: [9, 17], // 9am - 5pm
activeDays: ['Mon', 'Fri'], // Weekdays
timezone: 'America/New_York'
};
// Seasonal variations
pod.seasonalBehavior = {
summer: { boundaryExpansion: 1.5 },
winter: { boundaryContraction: 0.7 }
};// Adapt to environmental conditions
pod.contextRules = {
weather: {
rain: { energy: energy * 0.8 },
sunny: { visibility: 1.2 }
},
crowding: {
high: { boundaryContract: 0.8 },
low: { boundaryExpand: 1.2 }
}
};// Collaborative pods
pod.contributors = [user1, user2, user3];
pod.governance = {
votingThreshold: 0.6,
contentModeration: 'democratic',
editPermissions: 'contributors'
};
// Discovery mechanics
pod.discoverability = {
public: true,
searchable: true,
featured: false,
tags: ['restaurant', 'romantic', 'italian']
};// Token integration
pod.tokenomics = {
totalSupply: 1000,
creatorReserve: 200,
visitorPool: 800,
rewards: {
visit: 1,
content_add: 10,
high_engagement: 50
},
utility: {
voting: true,
premium_content: true,
revenue_share: true
}
};// Pods that evolve based on usage
pod.evolution = {
enabled: true,
adaptations: {
hotspots: 'add_anchor_particles',
dead_zones: 'reduce_particle_energy',
traffic_patterns: 'reshape_boundary'
},
learning_rate: 0.1,
adaptation_interval: '1 week'
};Current Implementation (Suitable for):
- 10-50 pods simultaneously
- 100-500 total particles
- 60 FPS on modern hardware
- Single browser tab
For Production Scaling:
-
Spatial Indexing
- Implement quad-tree or R-tree
- Query only nearby pods
- Cull off-screen particles
-
Level of Detail
- Reduce particle count for distant pods
- Lower boundary resolution
- Simplify rendering
-
Update Throttling
- Boundary recalculation: Every 3 frames
- Connection updates: Every 10 frames
- Energy decay: Every 60 frames
-
Web Workers
- Offload physics to separate thread
- Parallel boundary calculations
- Background network analysis
-
WebGL Rendering
- GPU-accelerated particles
- Shader-based field calculation
- Instanced rendering
// Cleanup inactive pods
function cleanupPods() {
for (pod of pods) {
if (pod.energy < 1 && pod.lastVisit > 30_DAYS) {
pod.archive();
pods.remove(pod);
}
}
}
// Limit active particles
const MAX_PARTICLES_PER_POD = 20;
const MAX_TOTAL_PARTICLES = 1000;Pods not appearing:
- Check canvas initialization
- Verify particle creation
- Ensure energy > 0
- Check visibility settings
Slow performance:
- Reduce particle count
- Lower boundary resolution
- Disable field visualization
- Check browser console for errors
Boundaries look wrong:
- Adjust boundary threshold
- Increase influence radius
- Check particle positions
- Verify charge values
Particles flying away:
- Reduce charge magnitude
- Increase damping
- Lower force multiplier
- Check for NaN values
// Enable debug logging
ForgeEngine.DEBUG = true;
// Show additional info
pod.debugDraw(ctx);
// Inspect particle data
console.log(pod.anchorParticles);
// Check field calculations
console.log(pod.calculateInfluenceField(testPoint));This is an open-source project following anti-gatekeeping philosophy. All contributions welcome!
Ways to Contribute:
- Report bugs or issues
- Suggest features or improvements
- Submit pull requests
- Create tutorials or documentation
- Share use cases
- Build integrations
# Clone repository
git clone https://github.com/yourname/spatialpod-forge
# Open in browser
open spatialpod_forge.html
# No build required!- Use clear, descriptive variable names
- Comment complex algorithms
- Follow existing patterns
- Write readable code over clever code
- Prioritize understanding over brevity
- Fork the repository
- Create feature branch
- Make your changes
- Test thoroughly
- Submit PR with clear description
- Respond to feedback
Core Beliefs:
- Knowledge should be freely shared
- No artificial barriers to entry
- Open-source > proprietary
- Teach, don't hoard
- Community over competition
This Means:
- MIT License (use freely)
- Single-file simplicity (no complex setup)
- Comprehensive documentation (anyone can understand)
- Educational focus (learn by exploring)
- No paywalls or feature-gating
Emergence over Design:
Rather than imposing structure, we create conditions for structure to emerge naturally. This mirrors nature:
- Galaxies form from gravity
- Ecosystems self-organize
- Languages evolve organically
- Markets find equilibrium
- SpatialPods emerge from particles
Simple Rules, Complex Behavior:
The most powerful systems arise from simple, fundamental rules consistently applied:
- Physics: F = ma → Universe
- Biology: DNA replication → Life
- Economics: Supply/demand → Markets
- SpatialPod: Particle interactions → Spatial experiences
Respect User Experience:
- Flexible, not rigid
- Intuitive, not complex
- Empowering, not constraining
- Natural, not artificial
Match Reality:
- Spaces are organic, not geometric
- Experiences are contextual, not static
- Connections are earned, not forced
- Value emerges naturally
Q: Why particles instead of predefined shapes? A: Particles allow boundaries to emerge naturally and adapt to context. Fixed shapes impose artificial constraints.
Q: Can I use this for commercial projects? A: Yes! MIT License means free commercial use. Just maintain the license notice.
Q: How do I add GPS coordinates? A: Currently uses canvas coordinates. GPS integration coming in Phase 5. For now, you can map GPS → canvas coordinates.
Q: Can pods overlap? A: Yes! Overlapping pods form connections and can share space naturally.
Q: What about 3D/AR? A: Current version is 2D for simplicity. 3D implementation coming in Phase 2 using Three.js or similar.
Q: How do I save my pods? A: Phase 2 will add localStorage/IndexedDB. For now, pods reset on refresh.
Q: Can multiple users edit together? A: Not yet. Multi-user collaboration coming in Phase 3.
Q: Is this mobile-friendly? A: Functional but optimized for desktop. Mobile optimization coming in Phase 2.
Q: How does this compare to [other system]? A: Most systems use fixed grids or point-based locations. SpatialPod uses emergent boundaries from particle systems - fundamentally different approach.
Q: Can I integrate with my app? A: Yes! The code is modular. Phase 5 will add official SDK.
Spatial Computing:
- Apple Vision Pro Spatial Anchors
- Microsoft HoloLens Spatial Mapping
- Google ARCore Cloud Anchors
- Niantic Lightship VPS
Particle Systems:
- Boids (Craig Reynolds, 1986)
- Smoothed Particle Hydrodynamics
- Molecular Dynamics Simulations
- Cellular Automata
Emergence Theory:
- Complex Adaptive Systems
- Self-Organization Theory
- Stigmergy in Social Insects
- Game of Life (Conway)
Key Papers:
- "Emergence: The Connected Lives of Ants, Brains, Cities" (Johnson)
- "The Computational Beauty of Nature" (Flake)
- "Artificial Life" (Langton)
- "Growing Artificial Societies" (Epstein & Axtell)
Relevant Fields:
- Computational geometry
- Agent-based modeling
- Spatial databases
- Pervasive computing
- Human-computer interaction
-
Optimal Boundary Formation
- How many particles minimize boundary error?
- What charge distributions create smoothest boundaries?
- Adaptive particle count based on space complexity?
-
Network Topology
- What connection patterns emerge naturally?
- How do network structures relate to physical geography?
- Can we predict optimal pod placement?
-
Energy Economics
- What decay rates match user behavior?
- How does content quality affect energy?
- Sustainable energy models for popular pods?
-
Social Dynamics
- How do collaborative pods evolve differently?
- What governance structures emerge?
- Impact of token economics on behavior?
-
Scaling Properties
- Performance characteristics at 1000+ pods?
- Hierarchical organization strategies?
- Global network properties?
James (Giblets Creations / ShapedMaker3D)
- 30 years hands-on technical experience
- Self-taught developer & robotics researcher
- Creator of Forge Theory framework
- Anti-gatekeeping advocate
- Natural systems & emergence
- Particle physics simulations
- Cellular automata
- Swarm intelligence
- Open-source philosophy
- Claude (Anthropic) for collaboration on architecture
- The open-source community
- Everyone who believes in freely shared knowledge
MIT License
Copyright (c) 2025 James (Giblets Creations)
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Project Repository: [GitHub Link]
Creator:
- Website: Giblets Creations
- Cults3D: ShapedMaker3D
- Etsy: [Your Store]
Get Involved:
- Report issues on GitHub
- Join discussions
- Share your pods
- Contribute code
- Spread the word
SpatialPod represents a fundamental shift in how we think about digital spaces. Instead of imposing artificial grids on the physical world, we let meaningful spatial experiences emerge naturally from simple rules.
This is Forge Theory in action - proof that complex, useful systems can arise from elegant, fundamental interactions.
The code is simple. The concepts are clear. The possibilities are endless.
Now go create some living spatial experiences. 🌐✨
"The most powerful systems emerge from the simplest rules consistently applied."
Version: 1.0.0
Last Updated: November 2025
Status: Active Development
License: MIT