vivraDocumentationV1How voting works

Appendix E · Recovery score

The recovery score is a mark out of 100 answering one question: can a Vivra CTO help this project recover? It is calculated during analysis of each team-submitted project and displayed for candidates so voters can compare the five projects consistently.

It does not select candidates: the team chooses the five projects. It also does not replace Vivra's target filters (peak market cap ≥ $500k, current market cap $15k–$50k, X account online but silent, accessible docs; see Project analysis). Filters determine who can enter; the score compares recovery potential.

The five pillars#

PillarPointsQuestion
1. Living community25Are people still behind the project?
2. Buyback impact25Would the buyback materially affect the current market?
3. Selling pressure20Who might sell into an initial recovery?
4. Project fundamentals15Is there a real project to take over, at the right time?
5. Flywheel15Could the CTO generate fees to buy back $VIVRA?
Total100

clamp(x) bounds x between 0 and 1. Logarithms keep larger projects from overwhelming smaller ones: moving from 300 to 1,000 holders counts as much as moving from 1,500 to 5,000.

1. Living community (25 points)#

CriterionPointsCalculation
Real holders1010 × clamp((log10(holders) − log10(300)) / (log10(5000) − log10(300))); excludes dust, pools, burn, and developer wallets
Loyal holders77 × clamp((holders for more than 30 days / holders) / 0.6)
New holders44 × clamp(new holders over 7 days / 25); people still buying a dead project
Community activity42 if at least one member message appeared in Telegram over the last 7 days; 2 if at least 5 tweets from other accounts mention the ticker or project over 7 days

The project's X account is silent by definition (a target filter): this measures the community, not the team.

2. Buyback impact (25 points)#

CriterionPointsCalculation
Simulated increase2525 × clamp(increase / 100%)

increase is the price increase obtained by simulating the entire cycle buyback envelope as one purchase against current liquidity (v4 pool or curve), including taxes. The envelope is the planned amount at calculation time (Buyback reserve, within the CTO token's cap).

A simulated increase of 100% or more gives 25 points. Actual buybacks are split over 7 days, so real results differ. This figure compares candidates; it does not predict a price and must never be displayed as a promise (see Dapp display).

3. Selling pressure (20 points)#

CriterionPointsCalculation
Developer and insider holdings88 × clamp(1 − holdings / 5%); developer, linked wallets (funded by or funding the developer), launch wallets
Concentration6top 10 excluding pools, burn, and developer: 6 at ≤ 20%, 0 at ≥ 50%, linear between
Underwater holders66 × clamp(supply share held by wallets at −80% or worse / 0.7)

The source's rationale is that a holder down 90% may be less inclined to sell after an initial 50% rebound. This is a scoring assumption, not a guarantee of behavior. Each wallet's cost basis is calculated from its purchases (weighted average of token trades), excluding tokens received through transfers alone.

4. Project fundamentals (15 points)#

CriterionPointsCalculation
Documentation44 for online docs or a whitepaper; 2 if only the website is online
Code31 for a public GitHub repository; +2 for at least 50 commits
X audience22 × clamp((log10(followers) − log10(1000)) / (log10(50000) − log10(1000)))
Peak market cap33 × clamp((log10(peak market cap) − log10(500000)) / (log10(5000000) − log10(500000)))
Timing3days since death (first day all Dead conditions held): 3 at 21–84 days, 1.5 at 14–20 or 85–180 days, 0 otherwise

Timing rationale: too early, selling may still be ongoing; too late, the community may have moved on.

5. Flywheel (15 points)#

CriterionPointsCalculation
Creator tax1010 × clamp(creator tax in bps / 300)
Pons v255 for a Pons v2 token (official CTO and on-chain fee tracking)

Display tiers#

ScoreLabelColor
75–100Strong recovery potentialVivra orange
50–74Recovery possibleink
0–49Difficult recoverygray

Example#

An illustrative Pons v2 tech project: $1.2M peak, $28k current market cap, 1,184 holders including 540 holding longer than 30 days, 9 new holders over 7 days, active Telegram but few X mentions, simulated buyback increase +62%, developer holdings 1.2%, top 10 at 28%, 55% of supply held at −80% or worse, online GitBook docs, GitHub repository with 140 commits, 6,200 followers, dead for 52 days, creator tax 2%.

PillarBreakdownPoints
Living community4.9 + 5.3 + 1.4 + 213.6 / 25
Buyback impact25 × 0.6215.5 / 25
Selling pressure6.1 + 4.4 + 4.715.2 / 20
Project fundamentals4 + 3 + 0.9 + 1.1 + 312.1 / 15
Flywheel6.7 + 511.7 / 15
Score68: Recovery possible

Required data#

DataSourceFrequency
Holders, holding age, new holders, concentrationtoken ERC-20 transfers, read during analysisat analysis, then every 15 min during voting
Cost basis per wallettoken trades (curve and pool)at analysis, then every 15 min during voting
Developer and linked walletsfunding trace (Appendix A, dev_wallets)at analysis
Simulated increasecurve or v4 pool quote (read-only, no transaction)at analysis, then every 15 min during voting
Telegram, X mentions, followersX API and Telegram linkat analysis, then daily during voting
Docs, website, whitepaper, GitHubHTTP requests and GitHub APIat analysis
Date of deathfirst day Dead conditions held, recomputed from historyat analysis

Parameters and storage#

  • All bounds and point values are in settings under recovery.*. A change creates a new weights_version; scores already frozen on published dossiers remain unchanged.
  • Each calculation is written to recovery_scores, with raw value, ratio, and points for every criterion in components.
  • Each candidate's score is frozen at cycle publication and displayed throughout voting; the live score appears beside it in a smaller format.
  • Missing data earns 0 for its criterion and is labeled “not found.”
  • The source names a pure function in packages/core/recovery-score.ts, tested with this example and edge cases (0 holders, missing data, out-of-range values). The inspected implementation is packages/core/src/recoveryScore.ts.

Dapp display#

  • Candidate dossier: Recovery score block near the top, with a large score, tier label, and one expandable bar per pillar showing each criterion and raw value (“1,184 holders,” “55% of supply underwater,” etc.). A “How it is calculated” link points here.
  • Vote: each candidate's score beside its name.
  • Back-office: each analyzed project's score helps the team assemble the ballot.
  • Label the simulated increase “estimated buyback impact on current liquidity,” never a price target.
  • Notice below the block: “The score describes the project's state; it is not investment advice.”
↑ ↓ to navigate · Enter to openVIVRA DOCS