Add railiance01 hosting at 8.99 EUR/mo from March 2026

Expense records and virtual server catalog entry for railiance01,
active from 2026-03 alongside existing domain and coulombcore costs.
This commit is contained in:
2026-06-22 02:21:55 +02:00
parent fc2324692c
commit bb3f152846
5 changed files with 78 additions and 31 deletions

View File

@@ -22,10 +22,10 @@ computes all totals programmatically (`ledger.py` → `economics.py`).
| Pricing models | `data/pricing-models.json` | | Pricing models | `data/pricing-models.json` |
| Membership | `data/membership.json` | | Membership | `data/membership.json` |
**Current reality:** infrastructure from January 2025 — domains **€6.75/mo** **Current reality:** infrastructure from January 2025 — domains **€6.75/mo**,
(`coulomb.social` €3.75 + `coulomb.pro` €3.00) and coulombcore hosting coulombcore hosting **€13.99/mo** (from Jan 2025), railiance01 hosting
**13.99/mo** (total **€20.74/mo**). Sole member payments from November 2025. **8.99/mo** (from Mar 2026). Sole member payments from November 2025. Customer
Customer cost-pass-through billing is not active. cost-pass-through billing is not active.
### Commands ### Commands

View File

@@ -451,6 +451,16 @@
"currency": "EUR", "currency": "EUR",
"source": "invoice" "source": "invoice"
}, },
{
"id": "exp-hosting-railiance01-2026-03",
"period": "2026-03",
"vendor": "hosting.railiance01",
"description": "railiance01 virtual server hosting",
"cost_class": "infrastructure",
"amount": "8.99",
"currency": "EUR",
"source": "invoice"
},
{ {
"id": "exp-domain-social-2026-04", "id": "exp-domain-social-2026-04",
"period": "2026-04", "period": "2026-04",
@@ -481,6 +491,16 @@
"currency": "EUR", "currency": "EUR",
"source": "invoice" "source": "invoice"
}, },
{
"id": "exp-hosting-railiance01-2026-04",
"period": "2026-04",
"vendor": "hosting.railiance01",
"description": "railiance01 virtual server hosting",
"cost_class": "infrastructure",
"amount": "8.99",
"currency": "EUR",
"source": "invoice"
},
{ {
"id": "exp-domain-social-2026-05", "id": "exp-domain-social-2026-05",
"period": "2026-05", "period": "2026-05",
@@ -511,6 +531,16 @@
"currency": "EUR", "currency": "EUR",
"source": "invoice" "source": "invoice"
}, },
{
"id": "exp-hosting-railiance01-2026-05",
"period": "2026-05",
"vendor": "hosting.railiance01",
"description": "railiance01 virtual server hosting",
"cost_class": "infrastructure",
"amount": "8.99",
"currency": "EUR",
"source": "invoice"
},
{ {
"id": "exp-domain-social-2026-06", "id": "exp-domain-social-2026-06",
"period": "2026-06", "period": "2026-06",
@@ -540,6 +570,16 @@
"amount": "13.99", "amount": "13.99",
"currency": "EUR", "currency": "EUR",
"source": "invoice" "source": "invoice"
},
{
"id": "exp-hosting-railiance01-2026-06",
"period": "2026-06",
"vendor": "hosting.railiance01",
"description": "railiance01 virtual server hosting",
"cost_class": "infrastructure",
"amount": "8.99",
"currency": "EUR",
"source": "invoice"
} }
], ],
"note": "Infrastructure expense ledger: domains and virtual server hosting. Totals computed by observatory/ledger.py." "note": "Infrastructure expense ledger: domains and virtual server hosting. Totals computed by observatory/ledger.py."

View File

@@ -7,8 +7,13 @@
"monthly_eur": "13.99", "monthly_eur": "13.99",
"started": "2025-01", "started": "2025-01",
"description": "Virtual server hosting for coulombcore" "description": "Virtual server hosting for coulombcore"
},
{
"name": "railiance01",
"monthly_eur": "8.99",
"started": "2026-03",
"description": "Virtual server hosting for railiance01"
} }
], ],
"monthly_total_eur": "13.99",
"note": "Reference catalog. Monthly expense rows live in expense_records.json." "note": "Reference catalog. Monthly expense rows live in expense_records.json."
} }

View File

@@ -6,7 +6,7 @@
> Platform costs accrue to the operator. Customer cost-pass-through billing is > Platform costs accrue to the operator. Customer cost-pass-through billing is
> **not active** in MVP — members pay subscription only. All totals are computed > **not active** in MVP — members pay subscription only. All totals are computed
> programmatically from expense and payment record ledgers (54 expense > programmatically from expense and payment record ledgers (58 expense
> records). > records).
## Key Metrics (current period) ## Key Metrics (current period)
@@ -15,13 +15,13 @@
|--------|------:| |--------|------:|
| Active members | 1 | | Active members | 1 |
| Member payments (gross) | 8.99 EUR | | Member payments (gross) | 8.99 EUR |
| Infrastructure cost | 20.74 EUR | | Infrastructure cost | 29.73 EUR |
| Payment processing cost | 0.38 EUR | | Payment processing cost | 0.38 EUR |
| Total platform cost | 21.12 EUR | | Total platform cost | 30.11 EUR |
| Platform cost per member | 21.12 EUR | | Platform cost per member | 30.11 EUR |
| Period gross margin | -12.13 EUR | | Period gross margin | -21.12 EUR |
| Period gross margin % | -134.9% | | Period gross margin % | -234.9% |
| Period net liquidity | -12.13 EUR (burning) | | Period net liquidity | -21.12 EUR (burning) |
_Period net liquidity = net member payments infrastructure cost (processing fees already netted from payments)._ _Period net liquidity = net member payments infrastructure cost (processing fees already netted from payments)._
_Revenue source: manual_ _Revenue source: manual_
@@ -32,11 +32,11 @@ _Revenue source: manual_
|--------|------:| |--------|------:|
| Initial budget | 1000.00 EUR | | Initial budget | 1000.00 EUR |
| Cumulative member payments (net) | 68.88 EUR | | Cumulative member payments (net) | 68.88 EUR |
| Cumulative infrastructure cost | 373.32 EUR | | Cumulative infrastructure cost | 409.28 EUR |
| Cumulative payment processing | 3.04 EUR | | Cumulative payment processing | 3.04 EUR |
| Cumulative total platform cost | 376.36 EUR | | Cumulative total platform cost | 412.32 EUR |
| Cumulative net liquidity | -304.44 EUR (burning) | | Cumulative net liquidity | -340.40 EUR (burning) |
| Remaining budget | 695.56 EUR (within budget) | | Remaining budget | 659.60 EUR (within budget) |
| Months tracked | 18 | | Months tracked | 18 |
## Monthly History ## Monthly History
@@ -57,10 +57,10 @@ _Revenue source: manual_
| 2025-12 | 1 | 8.99 | 20.74 | 0.38 | 21.12 | -12.13 | | 2025-12 | 1 | 8.99 | 20.74 | 0.38 | 21.12 | -12.13 |
| 2026-01 | 1 | 8.99 | 20.74 | 0.38 | 21.12 | -12.13 | | 2026-01 | 1 | 8.99 | 20.74 | 0.38 | 21.12 | -12.13 |
| 2026-02 | 1 | 8.99 | 20.74 | 0.38 | 21.12 | -12.13 | | 2026-02 | 1 | 8.99 | 20.74 | 0.38 | 21.12 | -12.13 |
| 2026-03 | 1 | 8.99 | 20.74 | 0.38 | 21.12 | -12.13 | | 2026-03 | 1 | 8.99 | 29.73 | 0.38 | 30.11 | -21.12 |
| 2026-04 | 1 | 8.99 | 20.74 | 0.38 | 21.12 | -12.13 | | 2026-04 | 1 | 8.99 | 29.73 | 0.38 | 30.11 | -21.12 |
| 2026-05 | 1 | 8.99 | 20.74 | 0.38 | 21.12 | -12.13 | | 2026-05 | 1 | 8.99 | 29.73 | 0.38 | 30.11 | -21.12 |
| 2026-06 | 1 | 8.99 | 20.74 | 0.38 | 21.12 | -12.13 | | 2026-06 | 1 | 8.99 | 29.73 | 0.38 | 30.11 | -21.12 |
## Pricing Model Registry ## Pricing Model Registry

View File

@@ -30,7 +30,9 @@ def test_infrastructure_aggregated_from_domain_expense_records() -> None:
totals = aggregate_infrastructure_by_period(expenses, fx) totals = aggregate_infrastructure_by_period(expenses, fx)
assert totals["2025-01"] == Decimal("20.74") assert totals["2025-01"] == Decimal("20.74")
assert totals["2026-06"] == Decimal("20.74") assert totals["2026-02"] == Decimal("20.74")
assert totals["2026-03"] == Decimal("29.73")
assert totals["2026-06"] == Decimal("29.73")
def test_monthly_ledger_starts_january_2025() -> None: def test_monthly_ledger_starts_january_2025() -> None:
@@ -43,7 +45,7 @@ def test_monthly_ledger_starts_january_2025() -> None:
assert march.infrastructure_cost == Decimal("20.74") assert march.infrastructure_cost == Decimal("20.74")
assert march.payment_processing_cost == Decimal("0.00") assert march.payment_processing_cost == Decimal("0.00")
assert june.infrastructure_cost == Decimal("20.74") assert june.infrastructure_cost == Decimal("29.73")
assert june.payment_processing_cost == Decimal("0.38") assert june.payment_processing_cost == Decimal("0.38")
assert june.gross_revenue == Decimal("8.99") assert june.gross_revenue == Decimal("8.99")
@@ -57,10 +59,10 @@ def test_build_snapshot_june_2026_domain_only_infrastructure() -> None:
snapshot = build_snapshot("2026-06", product, models, members, payments, ledger) snapshot = build_snapshot("2026-06", product, models, members, payments, ledger)
assert snapshot.monthly_infrastructure_cost == Decimal("20.74") assert snapshot.monthly_infrastructure_cost == Decimal("29.73")
assert snapshot.monthly_payment_processing_cost == Decimal("0.38") assert snapshot.monthly_payment_processing_cost == Decimal("0.38")
assert snapshot.monthly_total_platform_cost == Decimal("21.12") assert snapshot.monthly_total_platform_cost == Decimal("30.11")
assert snapshot.period_net_liquidity == Decimal("-12.13") assert snapshot.period_net_liquidity == Decimal("-21.12")
assert snapshot.liquidity_status == "burning" assert snapshot.liquidity_status == "burning"
@@ -71,12 +73,12 @@ def test_liquidity_summary_with_actual_domain_costs() -> None:
summary = build_liquidity_summary(budget, payments, ledger, "2026-06") summary = build_liquidity_summary(budget, payments, ledger, "2026-06")
assert summary.cumulative_infrastructure_cost == Decimal("373.32") assert summary.cumulative_infrastructure_cost == Decimal("409.28")
assert summary.cumulative_payment_processing_cost == Decimal("3.04") assert summary.cumulative_payment_processing_cost == Decimal("3.04")
assert summary.cumulative_total_platform_cost == Decimal("376.36") assert summary.cumulative_total_platform_cost == Decimal("412.32")
assert summary.cumulative_member_payments == Decimal("68.88") assert summary.cumulative_member_payments == Decimal("68.88")
assert summary.cumulative_net_liquidity == Decimal("-304.44") assert summary.cumulative_net_liquidity == Decimal("-340.40")
assert summary.remaining_budget == Decimal("695.56") assert summary.remaining_budget == Decimal("659.60")
assert summary.liquidity_status == "burning" assert summary.liquidity_status == "burning"
assert summary.months_tracked == 18 assert summary.months_tracked == 18
@@ -98,6 +100,6 @@ def test_dashboard_notes_expense_record_source() -> None:
report = generate_dashboard(DATA_DIR, "2026-06") report = generate_dashboard(DATA_DIR, "2026-06")
assert "expense and payment record ledgers" in report assert "expense and payment record ledgers" in report
assert "373.32" in report assert "409.28" in report
assert "695.56" in report assert "659.60" in report
assert "coulomb.social" not in report # dashboard shows aggregates, not domain names assert "coulomb.social" not in report # dashboard shows aggregates, not domain names