Compare commits

..

1 Commits

Author SHA1 Message Date
STEP35
ae2dd15c4e STEP35 FREE BURN: LUNA-2 Character Controller
Some checks failed
Self-Healing Smoke / self-healing-smoke (pull_request) Failing after 25s
Agent PR Gate / gate (pull_request) Failing after 55s
Smoke Test / smoke (pull_request) Failing after 27s
Agent PR Gate / report (pull_request) Successful in 24s
Implement character movement with physics: run, jump, gallop with particle effects.
- Add new actions: run (cost 3), jump (cost 1, energizing), gallop (cost 4, open areas only)
- Add trail particles to movement actions (dust sparkles, sprint dust, gallop stars)
- Extend available actions in PlayerInterface get_available_actions
- Update action_costs and ActionSystem.ACTIONS

Closes #969
Epic: #967 (LUNA: Mackenzie's Pink Unicorn Game)
2026-04-29 20:58:21 -04:00
9 changed files with 78 additions and 889 deletions

View File

@@ -427,6 +427,20 @@ class ActionSystem:
"description": "Move to an adjacent room",
"target": "room",
},
"run": {
"cost": 3,
"description": "Run to an adjacent room (faster but more tiring)",
"target": "room",
},
"jump": {
"cost": 1,
"description": "Jump in place (brief energy surge)",
},
"gallop": {
"cost": 4,
"description": "Gallop across open ground (requires Threshold or Bridge)",
"target": "room",
},
"speak": {
"cost": 1,
"description": "Say something to someone in the room",
@@ -502,6 +516,13 @@ class ActionSystem:
connections = world.rooms[room].get("connections", {})
for direction, dest in connections.items():
available.append(f"move:{direction} -> {dest}")
available.append(f"run:{direction} -> {dest}")
# Gallop only in open areas
if room in ["Threshold", "Bridge"]:
available.append(f"gallop:{direction} -> {dest}")
# Jump always available
available.append("jump")
# Speaking (if others are here)
here = [n for n in world.characters if world.characters[n]["room"] == room and n != char_name]
@@ -1091,14 +1112,16 @@ class GameEngine:
"npc_actions": [],
"choices": [],
"log": [],
"particles": [],
}
# Process Timmy's action
timmy_energy = self.world.characters["Timmy"]["energy"]
room_name = self.world.characters["Timmy"]["room"] # current room for early exit messages
# Energy constraint checks
action_costs = {
"move": 2, "tend_fire": 3, "write_rule": 2, "carve": 2,
"move": 2, "run": 3, "jump": 1, "gallop": 4, "tend_fire": 3, "write_rule": 2, "carve": 2,
"plant": 2, "study": 2, "forge": 3, "help": 2, "speak": 1,
"listen": 0, "rest": -2, "examine": 0, "give": 0, "take": 1,
}
@@ -1159,6 +1182,10 @@ class GameEngine:
self.world.characters["Timmy"]["room"] = dest
self.world.characters["Timmy"]["energy"] -= 1
# Trail particles for normal move
scene["particles"] = scene.get("particles", [])
scene["particles"].append("✨ dust sparkles in your wake")
scene["log"].append(f"You move {direction} to The {dest}.")
scene["timmy_room"] = dest
@@ -1169,7 +1196,7 @@ class GameEngine:
# Check trust changes for arrival
here = [n for n in self.world.characters if self.world.characters[n]["room"] == dest and n != "Timmy"]
if here:
scene["log"].append(f"{', '.join(here)} {'are' if len(here)>1 else 'is'} already here.")
scene["log"].append(f"{repr(', ').join(here)} {('are' if len(here)>1 else 'is')} already here.")
for person in here:
self.world.characters[person]["trust"]["Timmy"] = min(1.0,
self.world.characters[person]["trust"].get("Timmy", 0) + 0.05)
@@ -1214,6 +1241,55 @@ class GameEngine:
else:
scene["log"].append("You can't go that way.")
elif timmy_action.startswith("run:"):
direction = timmy_action.split(":")[1]
current_room = self.world.characters["Timmy"]["room"]
connections = self.world.rooms[current_room].get("connections", {})
if direction in connections:
dest = connections[direction]
self.world.characters["Timmy"]["room"] = dest
self.world.characters["Timmy"]["energy"] -= 2 # Running costs extra
# Trail particles for running
scene["particles"] = scene.get("particles", [])
scene["particles"].append("💨 sprinting dust trail")
scene["particles"].append("✨ sparkles streaking")
scene["log"].append(f"You sprint {direction} to The {dest}.")
else:
scene["log"].append("You can't go that way.")
elif timmy_action == "jump":
# Jump in place - energizing
self.world.characters["Timmy"]["energy"] = min(10, self.world.characters["Timmy"]["energy"] + 0.5)
scene["particles"] = scene.get("particles", [])
scene["particles"].append("⭐ jump sparkle burst")
scene["log"].append("You jump! A burst of energy lifts you.")
elif timmy_action.startswith("gallop:"):
direction = timmy_action.split(":")[1]
current_room = self.world.characters["Timmy"]["room"]
connections = self.world.rooms[current_room].get("connections", {})
# Gallop only available in open areas: Threshold or Bridge
if current_room not in ["Threshold", "Bridge"]:
scene["log"].append("You need open ground to gallop. Find the Threshold or Bridge.")
elif direction in connections:
dest = connections[direction]
self.world.characters["Timmy"]["room"] = dest
self.world.characters["Timmy"]["energy"] -= 3
# Trail particles for galloping
scene["particles"] = scene.get("particles", [])
scene["particles"].append("🌟 galloping star dust")
scene["particles"].append("✨ running sparkles")
scene["particles"].append("💨 wind trail")
scene["log"].append(f"You gallop {direction} to The {dest}. Hooves thunder.")
else:
scene["log"].append("You can't gallop that way.")
elif timmy_action.startswith("speak:"):
target = timmy_action.split(":")[1]
if self.world.characters[target]["room"] == self.world.characters["Timmy"]["room"]:

View File

@@ -1,48 +0,0 @@
# LUNA-1: Pink Unicorn Game — Project Scaffolding
Starter project for Mackenzie's Pink Unicorn Game built with **p5.js 1.9.0**.
## Quick Start
```bash
cd luna
python3 -m http.server 8080
# Visit http://localhost:8080
```
Or simply open `luna/index.html` directly in a browser.
## Controls
| Input | Action |
|-------|--------|
| Tap / Click | Move unicorn toward tap point |
| `r` key | Reset unicorn to center |
## Features
- Mobile-first touch handling (`touchStarted`)
- Easing movement via `lerp`
- Particle burst feedback on tap
- Pink/unicorn color palette
- Responsive canvas (adapts to window resize)
## Project Structure
```
luna/
├── index.html # p5.js CDN import + canvas container
├── sketch.js # Main game logic and rendering
├── style.css # Pink/unicorn theme, responsive layout
└── README.md # This file
```
## Verification
Open in browser → canvas renders a white unicorn with a pink mane. Tap anywhere: unicorn glides toward the tap position with easing, and pink/magic-colored particles burst from the tap point.
## Technical Notes
- p5.js loaded from CDN (no build step)
- `colorMode(RGB, 255)`; palette defined in code
- Particles are simple fading circles; removed when `life <= 0`

View File

@@ -1,18 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>LUNA-3: Simple World — Floating Islands</title>
<script src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.9.0/p5.min.js"></script>
<link rel="stylesheet" href="style.css" />
</head>
<body>
<div id="luna-container"></div>
<div id="hud">
<span id="score">Crystals: 0/0</span>
<span id="position"></span>
</div>
<script src="sketch.js"></script>
</body>
</html>

View File

@@ -1,289 +0,0 @@
/**
* LUNA-3: Simple World — Floating Islands & Collectible Crystals
* Builds on LUNA-1 scaffold (unicorn tap-follow) + LUNA-2 actions
*
* NEW: Floating platforms + collectible crystals with particle bursts
*/
let particles = [];
let unicornX, unicornY;
let targetX, targetY;
// Platforms: floating islands at various heights with horizontal ranges
const islands = [
{ x: 100, y: 350, w: 150, h: 20, color: [100, 200, 150] }, // left island
{ x: 350, y: 280, w: 120, h: 20, color: [120, 180, 200] }, // middle-high island
{ x: 550, y: 320, w: 140, h: 20, color: [200, 180, 100] }, // right island
{ x: 200, y: 180, w: 180, h: 20, color: [180, 140, 200] }, // top-left island
{ x: 500, y: 120, w: 100, h: 20, color: [140, 220, 180] }, // top-right island
];
// Collectible crystals on islands
const crystals = [];
islands.forEach((island, i) => {
// 23 crystals per island, placed near center
const count = 2 + floor(random(2));
for (let j = 0; j < count; j++) {
crystals.push({
x: island.x + 30 + random(island.w - 60),
y: island.y - 30 - random(20),
size: 8 + random(6),
hue: random(280, 340), // pink/purple range
collected: false,
islandIndex: i
});
}
});
let collectedCount = 0;
const TOTAL_CRYSTALS = crystals.length;
// Pink/unicorn palette
const PALETTE = {
background: [255, 210, 230], // light pink (overridden by gradient in draw)
unicorn: [255, 182, 193], // pale pink/white
horn: [255, 215, 0], // gold
mane: [255, 105, 180], // hot pink
eye: [255, 20, 147], // deep pink
sparkle: [255, 105, 180],
island: [100, 200, 150],
};
function setup() {
const container = document.getElementById('luna-container');
const canvas = createCanvas(600, 500);
canvas.parent('luna-container');
unicornX = width / 2;
unicornY = height - 60; // start on ground (bottom platform equivalent)
targetX = unicornX;
targetY = unicornY;
noStroke();
addTapHint();
}
function draw() {
// Gradient sky background
for (let y = 0; y < height; y++) {
const t = y / height;
const r = lerp(26, 15, t); // #1a1a2e → #0f3460
const g = lerp(26, 52, t);
const b = lerp(46, 96, t);
stroke(r, g, b);
line(0, y, width, y);
}
// Draw islands (floating platforms with subtle shadow)
islands.forEach(island => {
push();
// Shadow
fill(0, 0, 0, 40);
ellipse(island.x + island.w/2 + 5, island.y + 5, island.w + 10, island.h + 6);
// Island body
fill(island.color[0], island.color[1], island.color[2]);
ellipse(island.x + island.w/2, island.y, island.w, island.h);
// Top highlight
fill(255, 255, 255, 60);
ellipse(island.x + island.w/2, island.y - island.h/3, island.w * 0.6, island.h * 0.3);
pop();
});
// Draw crystals (glowing collectibles)
crystals.forEach(c => {
if (c.collected) return;
push();
translate(c.x, c.y);
// Glow aura
const glow = color(`hsla(${c.hue}, 80%, 70%, 0.4)`);
noStroke();
fill(glow);
ellipse(0, 0, c.size * 2.2, c.size * 2.2);
// Crystal body (diamond shape)
const ccol = color(`hsl(${c.hue}, 90%, 75%)`);
fill(ccol);
beginShape();
vertex(0, -c.size);
vertex(c.size * 0.6, 0);
vertex(0, c.size);
vertex(-c.size * 0.6, 0);
endShape(CLOSE);
// Inner sparkle
fill(255, 255, 255, 180);
ellipse(0, 0, c.size * 0.5, c.size * 0.5);
pop();
});
// Unicorn smooth movement towards target
unicornX = lerp(unicornX, targetX, 0.08);
unicornY = lerp(unicornY, targetY, 0.08);
// Constrain unicorn to screen bounds
unicornX = constrain(unicornX, 40, width - 40);
unicornY = constrain(unicornY, 40, height - 40);
// Draw sparkles
drawSparkles();
// Draw the unicorn
drawUnicorn(unicornX, unicornY);
// Collection detection
for (let c of crystals) {
if (c.collected) continue;
const d = dist(unicornX, unicornY, c.x, c.y);
if (d < 35) {
c.collected = true;
collectedCount++;
createCollectionBurst(c.x, c.y, c.hue);
}
}
// Update particles
updateParticles();
// Update HUD
document.getElementById('score').textContent = `Crystals: ${collectedCount}/${TOTAL_CRYSTALS}`;
document.getElementById('position').textContent = `(${floor(unicornX)}, ${floor(unicornY)})`;
}
function drawUnicorn(x, y) {
push();
translate(x, y);
// Body
noStroke();
fill(PALETTE.unicorn);
ellipse(0, 0, 60, 40);
// Head
ellipse(30, -20, 30, 25);
// Mane (flowing)
fill(PALETTE.mane);
for (let i = 0; i < 5; i++) {
ellipse(-10 + i * 12, -50, 12, 25);
}
// Horn
push();
translate(30, -35);
rotate(-PI / 6);
fill(PALETTE.horn);
triangle(0, 0, -8, -35, 8, -35);
pop();
// Eye
fill(PALETTE.eye);
ellipse(38, -22, 8, 8);
// Legs
stroke(PALETTE.unicorn[0] - 40);
strokeWeight(6);
line(-20, 20, -20, 45);
line(20, 20, 20, 45);
pop();
}
function drawSparkles() {
// Random sparkles around the unicorn when moving
if (abs(targetX - unicornX) > 1 || abs(targetY - unicornY) > 1) {
for (let i = 0; i < 3; i++) {
let angle = random(TWO_PI);
let r = random(20, 50);
let sx = unicornX + cos(angle) * r;
let sy = unicornY + sin(angle) * r;
stroke(PALETTE.sparkle[0], PALETTE.sparkle[1], PALETTE.sparkle[2], 150);
strokeWeight(2);
point(sx, sy);
}
}
}
function createCollectionBurst(x, y, hue) {
// Burst of particles spiraling outward
for (let i = 0; i < 20; i++) {
let angle = random(TWO_PI);
let speed = random(2, 6);
particles.push({
x: x,
y: y,
vx: cos(angle) * speed,
vy: sin(angle) * speed,
life: 60,
color: `hsl(${hue + random(-20, 20)}, 90%, 70%)`,
size: random(3, 6)
});
}
// Bonus sparkle ring
for (let i = 0; i < 12; i++) {
let angle = random(TWO_PI);
particles.push({
x: x,
y: y,
vx: cos(angle) * 4,
vy: sin(angle) * 4,
life: 40,
color: 'rgba(255, 215, 0, 0.9)',
size: 4
});
}
}
function updateParticles() {
for (let i = particles.length - 1; i >= 0; i--) {
let p = particles[i];
p.x += p.vx;
p.y += p.vy;
p.vy += 0.1; // gravity
p.life--;
p.vx *= 0.95;
p.vy *= 0.95;
if (p.life <= 0) {
particles.splice(i, 1);
continue;
}
push();
stroke(p.color);
strokeWeight(p.size);
point(p.x, p.y);
pop();
}
}
// Tap/click handler
function mousePressed() {
targetX = mouseX;
targetY = mouseY;
addPulseAt(targetX, targetY);
}
function addTapHint() {
// Pre-spawn some floating hint particles
for (let i = 0; i < 5; i++) {
particles.push({
x: random(width),
y: random(height),
vx: random(-0.5, 0.5),
vy: random(-0.5, 0.5),
life: 200,
color: 'rgba(233, 69, 96, 0.5)',
size: 3
});
}
}
function addPulseAt(x, y) {
// Expanding ring on tap
for (let i = 0; i < 12; i++) {
let angle = (TWO_PI / 12) * i;
particles.push({
x: x,
y: y,
vx: cos(angle) * 3,
vy: sin(angle) * 3,
life: 30,
color: 'rgba(233, 69, 96, 0.7)',
size: 3
});
}
}

View File

@@ -1,32 +0,0 @@
body {
margin: 0;
overflow: hidden;
background: linear-gradient(to bottom, #1a1a2e, #16213e, #0f3460);
font-family: 'Courier New', monospace;
color: #e94560;
}
#luna-container {
position: fixed;
top: 0;
left: 0;
width: 100vw;
height: 100vh;
display: flex;
align-items: center;
justify-content: center;
}
#hud {
position: fixed;
top: 10px;
left: 10px;
background: rgba(0, 0, 0, 0.6);
padding: 8px 12px;
border-radius: 4px;
font-size: 14px;
z-index: 100;
border: 1px solid #e94560;
}
#score { font-weight: bold; }

View File

@@ -1,93 +0,0 @@
# Fleet Operator Incentives Program
## Overview
This specification defines the incentive structure and certification program for Timmy Home fleet operators. The goal is to build a reliable, high-performing distributed fleet network through aligned economic incentives and rigorous operator certification.
## Program Objectives
- Recruit and retain 3-5 active certified operators within 6 months
- Maintain operator churn <10% annually
- Achieve fleet uptime >99.5%
- Ensure partner channel delivers >30% of leads
## Operator Tiers & Requirements
### Tier 1: Certified Operator
- Complete operator application and training
- Maintain minimum hardware specifications
- Agree to SLAs and monitoring
- Pass technical assessment
### Tier 2: Senior Operator
- 6+ months active participation
- Uptime >99.7%
- Mentor at least 1 new operator
- Advanced troubleshooting capabilities
### Tier 3: Fleet Lead
- 12+ months active participation
- Uptime >99.9%
- Team lead responsibilities
- Strategic input on fleet improvements
## Incentive Structure
### Base Compensation
- Tier 1: $X/month per active node
- Tier 2: $Y/month per active node (+15% bonus)
- Tier 3: $Z/month per active node (+30% bonus)
### Performance Bonuses
- Uptime bonus: Additional 5% for >99.5% monthly uptime
- Lead generation bonus: $100 per qualified lead from operator network
- Mentorship bonus: $200/month per successfully onboarded mentee
### Penalties & Adjustments
- Downtime deductions: Prorated based on SLA breach
- Early termination fees: 50% of commitment period value
- Performance improvement plan for chronic underperformance
## Certification Process
1. Application submission (operator-application.md template)
2. Technical screening and hardware validation
3. Training completion (modules & hands-on)
4. Assessment exam (minimum 80% score)
5. Probation period (30 days)
6. Full certification
## Monitoring & Metrics
- Real-time uptime monitoring via Prometheus/Grafana
- Monthly performance reports
- Quarterly business reviews for senior operators
- Automated alerting for SLA breaches
## Partner Program Integration
- Certified operators become partner channel participants
- Operators receive referral commissions
- Partner leads tracked through dedicated attribution system
- Monthly partner reports generated (partner-report.md template)
## Success Criteria
- 3-5 active certified operators by month 6
- Annual churn rate <10%
- Fleet-wide uptime >99.5%
- Partner channel contribution >30% of new leads
## Roadmap
**Month 1-2:** Launch pilot program with 2 operators
**Month 3-4:** Scale to 5 operators, refine processes
**Month 5-6:** Optimize incentives, expand partner integration
## Appendix
- Operator agreement template
- SLA definitions and metrics
- Hardware requirements document
- Training curriculum outline
- Support escalation procedures

View File

@@ -1,161 +0,0 @@
# Fleet Operations Runbook
## Emergency Procedures
### System Outage Response
**Severity 1 (Total Outage)**
- Immediate: Alert all on-call operators via PagerDuty
- Within 15min: Incident commander declared, communication channel established
- Within 1hr: Root cause identified or escalation to engineering
- Resolution: Post-mortem within 24 hours
**Severity 2 (Partial Degradation)**
- Alert within 30min
- Diagnosis within 2 hours
- Resolution or workaround within 4 hours
**Severity 3 (Minor Issues)**
- Ticket creation in incident tracker
- Resolution within 24 hours
### Hardware Failure
1. **Node Failure Detection**
- Automated monitoring alerts when node >5min offline
- Operator SMS/email notification
- Auto-escalation if no response within 10min
2. **Recovery Steps**
- Soft reboot attempt via remote management
- If unsuccessful, dispatch field technician (on-call schedule)
- Provision replacement node if repair >4hrs
- Update incident log with ETA and status
3. **Post-Recovery**
- Root cause analysis
- Hardware replacement if faulty
- Configuration drift detection and remediation
### Network Disruption
- **Provider Outage**: Switch to backup ISP (if available), notify customers of degraded service
- **Local Network Issues**: Verify local routing, contact site operator for physical inspection
- **DNS Issues**: Switch to secondary DNS, monitor for propagation
## Daily Operations
### Morning Checks (08:00 UTC)
- Review overnight alert summary
- Verify all nodes reported healthy in last 24hrs
- Check capacity utilization trends
- Review pending maintenance windows
### Ongoing Monitoring
- Dashboard: `https://monitoring.timmyfoundation.org/fleet`
- Slack channel: `#fleet-operations`
- PagerDuty schedule: rotate weekly among Tier 3 operators
### Handoff Procedure
- Outgoing operator: Complete handoff checklist by end of shift
- Incoming operator: Review log, verify all systems nominal
- Both parties: Sign off in runbook log
## Maintenance Windows
- **Weekly**: Software updates (Sunday 02:00-04:00 UTC)
- **Monthly**: Hardware inspection and cleaning
- **Quarterly**: Full system audit and capacity planning
## Escalation Path
```
Operator (Tier 1) → Senior Operator (Tier 2) → Fleet Lead (Tier 3)
Engineering On-Call (P0-P1 incidents)
CTO / Executive Review (P0 incidents, business critical)
```
## Communication Templates
### Outage Notification (Customer-Facing)
```
Subject: Service Disruption Notification
Dear Customer,
We are currently experiencing an issue affecting [service]. Our team is investigating and working to restore service as quickly as possible.
Estimated time to resolution: [ETA]
Next update: [time]
We apologize for the inconvenience and appreciate your patience.
Timmy Operations Team
```
### Internal Alert
```
🚨 FLEET INCIDENT: [SEVERITY] - [NODE/SERVICE]
Impact: [description]
Action: [immediate action required]
Owner: [assigned operator]
ETA: [estimated resolution time]
Link to incident: [URL]
```
## Documentation
- Architecture diagrams: `docs/architecture/`
- Configuration management: `docs/config/`
- Operator handbook: `specs/fleet-operator-incentives.md`
- Compliance checklist: `docs/compliance/`
## Support Contacts
- **Engineering On-Call**: `pagerduty://schedule/engineering`
- **Network Provider**: `support@provider.com / 1-800-SUPPORT`
- **Hardware Vendor**: `support@vendor.com / 1-800-HARDWARE`
- **Internal Fleet Slack**: `#fleet-operations`
## Recovery Objectives (RTO/RPO)
| Service | RTO | RPO |
|---------|-----|-----|
| API Services | 15min | 5min |
| Data Pipeline | 1hr | 15min |
| Monitoring | 30min | N/A |
| Backup Systems | 4hr | 24hr |
## Change Management
- All production changes require RFC and approval
- Emergency changes: Document rationale, notify within 24hrs
- Standard changes: Weekly change window (Wednesday 22:00 UTC)
- Post-change validation required for all modifications
## Security Incidents
- Immediate isolation of affected nodes
- Preserve logs for forensic analysis
- Notify security team within 15min
- Follow incident response playbook: `docs/security/incident-response.md`
## Metrics & KPIs
- **MTTR**: Mean time to recovery
- **Uptime**: Node and service availability percentages
- **Capacity**: Utilization vs. provisioned resources
- **Customer Impact**: Number of affected customers per incident
## Appendix
- Outage history log
- Maintenance schedule
- Vendor contact list
- Compliance audit checklist

View File

@@ -1,112 +0,0 @@
# Fleet Operator Application
## Personal Information
**Full Name:**
**Email:**
**Phone:**
**Location (City, State/Province, Country):**
**Time Zone:**
## Business Entity
**Legal Structure:** (Sole Proprietor / LLC / Corporation / Other)
**Business Registration Number:**
**Tax ID/EIN:**
**Years in Operation:**
## Technical Capabilities
### Infrastructure
- **Number of Nodes Available:** __________
- **Hardware Specifications (per node):**
- CPU: __________
- RAM: __________
- Storage: __________
- Network: __________
- **Uptime History (past 12 months):** __________%
- **Average Monthly Downtime:** __________ hours
### Connectivity
- **Primary ISP:** __________
- **Backup ISP:** __________ (Yes/No)
- **Average Upload Speed:** __________ Mbps
- **Average Download Speed:** __________ Mbps
- **Latency to primary regions:** __________ ms
### Security & Compliance
- **Physical Security Measures:** (e.g., locked racks, cameras)
- **Network Security:** (firewalls, VPNs, monitoring)
- **Data Privacy Compliance:** (GDPR, CCPA, etc.)
- **Insurance Coverage:** (liability, errors & omissions)
## Operational Capacity
**Support Hours:** __________ (24/7 / Business Hours / On-call)
**Staff Count:** __________ (Full-time / Part-time)
**Incident Response SLA:** __________
**Monitoring Tools Used:** __________
## Financial Terms
**Desired Compensation Model:** (Tier 1 / Tier 2 / Tier 3)
**Expected Monthly Revenue:** $__________
**Start Date Availability:** __________
**Commitment Period:** (6 months / 12 months / 24 months)
## References
**Previous Fleet/Customer References:**
1. Name: __________ | Contact: __________ | Relationship: __________
2. Name: __________ | Contact: __________ | Relationship: __________
**Technical References:**
1. Name: __________ | Contact: __________ | Relationship: __________
## Certifications
- [ ] AWS/Azure/GCP Certification
- [ ] Network+ / Security+
- [ ] ISO 27001
- [ ] SOC 2
- [ ] Other: __________
## Motivation & Alignment
**Why do you want to join the Timmy Home Fleet?** (max 500 words)
**How does your operation align with our values of reliability, transparency, and continuous improvement?** (max 300 words)
## Attachments
- [ ] Proof of business registration
- [ ] Insurance certificates
- [ ] Network performance reports (last 3 months)
- [ ] Hardware inventory list
- [ ] Signed NDA (if not already on file)
## Agreement
By submitting this application, I certify that all information provided is accurate and complete. I understand that false statements may result in termination of the operator agreement.
**Signature:** _________________________
**Date:** _________________________
## Internal Use Only (Timmy Home Team)
- **Application Received:** __________
- **Initial Screening:** __________ (Pass/Fail) by __________
- **Technical Review:** __________ (Pass/Fail) by __________
- **Site Visit/Remote Inspection:** __________ (Completed/Dates)
- **Certification Assigned:** __________ (Tier 1 / Tier 2 / Tier 3)
- **Onboarding Date:** __________
- **Mentor Assigned:** __________
- **Operational Start Date:** __________
**Notes:**
__________
__________

View File

@@ -1,134 +0,0 @@
# Partner Monthly Report
## Report Period
**Month/Year:** __________
**Partner ID:** __________
**Partner Name:** __________
**Report Generated:** __________
## Executive Summary
- Total leads generated: __________
- Qualified leads: __________
- converted customers: __________
- Revenue attributed: $__________
- Commission earned: $__________
- YoY growth: __________%
## Lead Generation Metrics
### Lead Volume
| Channel | Total Leads | Qualified Leads | Conversion Rate | Notes |
|---------|-------------|-----------------|-----------------|-------|
| Direct Referral | __ | __ | __% | |
| Marketing Campaign | __ | __ | __% | |
| Events/Conferences | __ | __ | __% | |
| Other: __________ | __ | __ | __% | |
### Lead Quality Assessment
- **High Value (likely to convert):** __________ leads
- **Medium Value:** __________ leads
- **Low Value:** __________ leads
- **Lead Source Validation:** __________% verified
## Revenue & Commission
### Revenue Attribution
| Customer | Deal Size | Start Date | Commission % | Commission Amount |
|----------|-----------|------------|--------------|-------------------|
| | $ | | % | $ |
| | $ | | % | $ |
| | $ | | % | $ |
- **Total Revenue:** $__________
- **Total Commission:** $__________
- **Commission Rate:** __________%
- **Payment Status:** (Paid / Pending / Escrow)
### Payment Schedule
- **Commission Period:** 1st - last day of month
- **Payment Date:** __________ (net 30 days)
- **Payment Method:** (ACH / Wire / Check / Crypto)
- **Invoice Attached:** (Yes/No)
## Fleet Performance Impact
### Operator Contributions
| Operator | Leads Generated | Conversions | Revenue Impact |
|----------|----------------|-------------|----------------|
| | | | $ |
| | | | $ |
| | | | $ |
### Uptime & Reliability Correlation
- **Average fleet uptime during reporting period:** __________%
- **Leads from high-uptime operators (>99.5%):** __________
- **Customer complaints related to fleet issues:** __________
## Marketing & Training Activities
### Promotional Efforts
- Campaigns run: __________
- Materials distributed: __________
- Events attended: __________
- Content created: __________
### Training Completed
- New operator certifications: __________
- Continuing education hours: __________
- Process improvements implemented: __________
## Challenges & Blockers
- __________
- __________
- __________
## Opportunities & Goals (Next Period)
1. __________
2. __________
3. __________
## Support Needs
- __ Technical assistance
- __ Marketing materials
- __ Training resources
- __ Lead qualification support
- __ Other: __________
## Compliance & Agreement Status
- [ ] All reporting requirements met
- [ ] Commissions calculated correctly
- [ ] SLA adherence documented
- [ ] Partner agreement in good standing
- [ ] No compliance violations
**Partner Signature:** _________________________
**Date:** _________________________
**Timmy Home Representative:** _________________________
**Date:** _________________________
## Attachments
- [ ] Lead verification documentation
- [ ] Revenue reports from finance system
- [ ] Commission calculation spreadsheet
- [ ] Marketing activity logs
- [ ] Training completion certificates
---
*This report is confidential and intended solely for the use of the partner and Timmy Home leadership. Distribution without authorization is prohibited.*