WikiDeal Funding MVP — Technical Specifications
DRAFT v0.1 · 2026-08-18 · Status: working draft, awaits human validation ·
Reference mockups: WikiDeal Funding hub ·
Currency: Swiss francs (CHF) only
Purpose. This document translates the WikiDeal funding mockups
(
aidev.wikideal.net/mockups/funding/) into implementable IT requirements,
as the basis for a small call for proposals. The expected result of the development is the behaviour
presented in the mockups. Budget envelope for the MVP:
CHF 3'000 – 5'000.
Respondents are asked to quote a fixed price and a delivery timeline (see
§8).
1. Context & scope overview
WikiDeal (a project of the Ynternet.org Foundation)
raises donations to fund its Prototype 1. Donors and Early Supporters receive Rewards,
which are progressively compensated in cash by the income of WikiDeal subscriptions.
The MVP is the minimal working system that supports this loop:
- Donation payments by credit card (Stripe) or bank transfer, in CHF.
- Reward activation — automatic at card payment time, manual (operator registry) for bank transfers and Early Supporters.
- Subscriptions — CHF 1/month or CHF 10/year (annual recommended).
- Subscription income distribution to holders of already-activated Rewards, visible on each user's dashboard.
- Accounts with single sign-on shared with the MediaWiki at wikideal.net.
Outgoing payouts to users' bank accounts are not part of the MVP (Phase 2, see §4).
2. Core concepts & terminology
| Term | Definition |
| Reward | The single unit of recognition attributed to supporters. There is one type of Reward only (no sub-categories). Rewards are not guaranteed financial instruments; they are compensated over time by subscription income. Total attributed in Prototype 1: 100'000'000 Rewards. |
| Attributed (promised) Rewards | Rewards assigned to a person (by donation or as Early Supporter) but not yet compensated in cash. Shown in the left column of the dashboard mockup. |
| Activated Rewards | Attributed Rewards whose holder has completed the activation step (automatic at card payment; manual by the Foundation secretariat otherwise). Only activated Rewards participate in subscription income distribution. |
| Cash-out balance (obtained) | CHF amount already earned by a holder through distributions. Accumulates on the dashboard; transferable to a bank account only from CHF 100, and only in Phase 2. |
| Early Supporter | Person who received a Reward attribution manually (registered by the secretariat after a webinar), without a card payment. |
| Subscriber | Person paying CHF 1/month or CHF 10/year. Subscribers get access to WikiDeal member benefits (list maintained separately); they do not receive Rewards. |
Terminology rule for implementers: use the single word Reward(s) everywhere.
Do not introduce “Community Rewards”, “Personal Rewards”, “miles”, “cashback”, “investment”, “tokens” or similar terms in UI, code identifiers, or documentation.
3. Functional requirements (MVP)
F1 — Donation payment by card (Stripe) MVP
- Donation form (mockup: funding-donation-form.html) with amount input in CHF.
- Minimum CHF 250, maximum CHF 5'000 per card payment. Above the card ceiling, the UI directs the donor to bank transfer (F3).
- Payment processed by Stripe (Checkout or Payment Element), currency CHF.
- Stripe processing fees are added on top and paid by the donor (the Foundation receives the full donation amount). The fee amount is displayed before confirmation.
- On successful payment: e-mail receipt / donation certificate (mockup: funding-certificate.html) and immediate Reward activation (F2).
F2 — Automatic Reward activation at card payment MVP
- Fixed multiplier ×100: a donation of CHF 1'000 attributes and activates 100'000 Rewards. No bonding curve in the MVP (the multiplier is a configuration variable, to prepare Phase 2).
- Activation happens synchronously in the payment confirmation flow (webhook-driven:
checkout.session.completed or equivalent).
- The new balance is immediately visible on the donor's dashboard (F7).
F3 — Bank-transfer donations, manual activation MVP
- For amounts above the card ceiling (and as an option for any donor), the donation is made by bank transfer to the Ynternet.org Foundation account. The system displays the bank details and a payment reference.
- No bank-API integration in the MVP: the Foundation secretariat checks the account, then activates the Rewards manually within 7 days using the operator registry (F5).
- The donor sees a “pending activation” state on their dashboard until activation.
F4 — Subscriptions MVP
- Two plans, CHF only: CHF 1/month or CHF 10/year. The UI clearly recommends the annual plan (mockup: funding-signup.html).
- Recurring billing via Stripe Billing (subscriptions), card payment.
- Subscribers receive access to WikiDeal member benefits (list referenced separately); subscriptions do not create Rewards.
- Standard lifecycle: subscribe, renew, cancel, failed-payment dunning (Stripe defaults acceptable).
F5 — Online Reward registry & operator interface MVP
- Web interface for the Foundation secretariat (mockup: funding-validation.html).
- An online table associating an e-mail address → attributed Reward amount, with an Activate action per row. Used for:
- Early Supporters: Rewards attributed manually, activated by the secretariat after the onboarding webinar;
- Bank-transfer donors: activation within 7 days after the transfer arrives on the Foundation account.
- Every attribution/activation is logged (who, what, when — simple action log as shown in the mockup).
- Access restricted to authenticated operator accounts.
F6 — Distribution of subscription income to Reward holders MVP
- Each subscription payment received is distributed to holders of already-activated Rewards, as cash-out balance credit:
- 25% to donors (holders whose Rewards come from a donation);
- 25% to Early Supporters;
- the remaining share is retained by the Foundation for project operations TO CONFIRM.
- Within each group, the amount is shared between all activated-Reward holders (allocation key pro-rata of activated Rewards TO CONFIRM).
- As cash is credited, the corresponding Rewards are progressively consumed: the dashboard shows attributed Rewards decreasing in favour of the cash-out balance. The exact Reward-to-CHF consumption parameter is a configuration variable TO CONFIRM.
- Distribution may run as a periodic batch job (e.g. daily) rather than per-transaction, provided dashboard figures stay consistent.
- Full auditability: every distribution event is stored (source payment, date, per-holder credit).
F7 — User dashboard MVP
- Authenticated dashboard per the mockup funding-dashboard-proposal-c.html (public view: funding-dashboard-unauth.html).
- Displays at minimum: attributed (promised) Rewards not yet compensated · activated status · cash-out balance in CHF (obtained) · history of distributions received.
- The cash-out balance accumulates freely; the UI states that no transfer is possible below CHF 100 and that bank payout will open in a later phase (mockup: funding-how-to-cash.html). No outgoing payment is implemented in the MVP.
F8 — Accounts & single sign-on with MediaWiki MVP
- An account is required to hold Rewards, subscribe, and edit the wiki. Editing wikideal.net is never anonymous, but pseudonymous accounts are allowed: first name, last name and e-mail address are not exposed publicly.
- SSO approach: the existing MediaWiki (wikideal.net) acts as the identity provider — e.g. via the MediaWiki
OAuth extension (or OpenID Connect equivalent) — and the funding dashboard authenticates against it. One account gives access to both wiki editing and the funding dashboard. This is the lowest-cost option and the preferred one; respondents may propose an equivalent-cost alternative with justification.
- Account creation flow per mockup funding-signup.html.
4. Phase 2 — explicitly out of MVP scope PHASE 2
The following will be developed after the MVP, in a second stage. The MVP architecture should not block them, but no Phase-2 work is expected or paid within this envelope:
- Bonding curve: the fixed ×100 multiplier evolves along a defined curve (×100 → ×30, fixed algorithm).
- Funding Stabilizer: automatic mechanism adjusting distribution according to Foundation needs.
- Cash-out transfers: automatic or manual payout of the cash-out balance (≥ CHF 100) to the user's bank account, with user options.
5. Indicative data model
Indicative only — respondents may propose their own schema, provided the auditability requirements hold.
| Entity | Key fields |
users | id, pseudonym, e-mail (private), MediaWiki identity link, role (user / operator) |
reward_grants | holder, amount, origin (card_donation / bank_donation / early_supporter), status (attributed / activated), activation timestamp & actor |
payments | type (donation_card / donation_bank / subscription), gross amount CHF, Stripe references, status |
subscriptions | plan (monthly / yearly), Stripe subscription id, status |
distributions | source payment, date, per-holder credits (CHF), Rewards consumed |
audit_log | append-only: operator actions, activations, distributions |
An append-only ledger style for Reward and cash movements is strongly recommended (no destructive updates of balances).
6. Non-functional requirements
- Currency: CHF everywhere. No EUR, no other currency, no crypto.
- Hosting: deployable on Ynternet.org Foundation infrastructure (Linux/nginx environment, same family as aidev.wikideal.net).
- Licensing: all delivered code under a free license (Free Licensing policy of the project).
- Privacy: pseudonymity supported; personal data (e-mail, name if given) never exposed publicly; data minimization; EU/Swiss data-protection compliance.
- Auditability: every money and Reward movement traceable and exportable (CSV at minimum).
- Transactional integrity: Stripe webhooks idempotent; no double activation or double credit.
- Languages: UI in English for the MVP; architecture must not block later French localization.
- E-mail: transactional e-mails for receipt/certificate, activation confirmation, subscription events.
7. Technology stack
Suggested option (not mandatory): Laravel + VueJS, matching the team's existing base
(investment-dashboard repository serving aidev.wikideal.net) and the current developer's proposal.
Respondents may propose another stack, with justification, provided it satisfies §6 (hostable on Foundation
infrastructure, free license, maintainable).
8. What proposals must contain
- Fixed price in CHF for the full MVP scope (§3), within the CHF 3'000 – 5'000 envelope. If the envelope cannot be met, state which requirements you propose to defer and the resulting price.
- Delivery timeline (calendar weeks from kick-off).
- Stack & architecture summary (1 page max), including the SSO approach for F8.
- Included / excluded items, assumptions, and Stripe account prerequisites.
- Maintenance: proposed conditions after delivery (optional).
9. Reference mockups (user journey)
The mockups below define the expected result. Latest versions, maintained at the
Funding hub:
10. Open points to be confirmed OPEN
- Card / bank-transfer threshold: card payments capped at CHF 5'000; bank transfer mentioned from CHF 2'000 in one source. To confirm: is bank transfer required above CHF 5'000 and optional from CHF 2'000, or another rule?
- Remaining share of subscription income (after 25% donors + 25% Early Supporters): confirmed as retained by the Foundation?
- Allocation key within each group: pro-rata of activated Rewards, or another rule (e.g. partly FIFO)?
- Reward consumption parameter: at which rate are Rewards consumed when cash is credited (dashboard left column decreasing)?
- Subscriber benefits list: reference document to link from the signup page.
These points go in this tendency and are proposed as a basis of discussion; they will be settled before contract signature with the selected respondent.