← Research archive
Technical note verified Sep 15, 2026

Telemetry-Backed User Profiles, Community Scoring, and Privacy Controls

KESPA added complete authenticated profiles, historical usage analytics, milestones, a 182-day activity history, community leaderboards, KESPA Score v2, and opt-in public profiles using existing persisted telemetry rather than a second analytics pipeline. The design keeps prompts, answers, private memories, request diagnostics, and user/community statistics out of NexLedger.

telemetry user-profiles leaderboard privacy community-analytics
MARKDOWN

README.md

4,678 bytes SHA-256 f2b5f659f6407dbb…

KESPA-NOTE-016 — Telemetry-Backed User Profiles, Community Scoring, and Privacy Controls

Date: 2026-09-15 Status: Verified — implementation and functional validation complete Project: KESPA AI / NexLabs Studios

Purpose

KESPA added a complete user-profile and community analytics layer without creating a second telemetry system.

The feature derives its statistics from existing application data:

users + chats + messages + forge_request_metrics -> UserStats -> profile / leaderboard / public profile

That keeps product analytics tied to the same persisted runtime measurements already used elsewhere in KESPA.

Observed tracked history

At implementation time, the recorded telemetry included:

  • telemetry requests: 120
  • tracked chats: 21
  • tracked user messages: 120
  • tracked KESPA responses: 119
  • input tokens processed: 278,526
  • output tokens generated: 24,657
  • total model tokens: 303,183

Telemetry history begins approximately September 2, 2026.

Because telemetry retention and retained chat/message history do not cover exactly the same period, the UI deliberately uses terms such as:

  • Tracked chats
  • Tracked requests
  • Tracked since

rather than claiming absolute lifetime totals.

Benchmark-tagged telemetry is excluded from product-facing profile and leaderboard statistics.

User profile

The authenticated /profile page exposes safe user-facing aggregates such as:

  • account identity and plan;
  • usage and token totals;
  • response latency / TTFT / tokens-per-second;
  • RAG, web, memory, review, cache, model, and reasoning-mode usage;
  • estimated active time;
  • streaks;
  • milestones;
  • 182-day activity heatmap.

Token terminology was deliberately written to avoid misleading users. For example:

Input tokens processed

is used instead of implying all prompt tokens represent words manually typed by the user.

Estimated active time

Requests are sorted chronologically.

A gap of 5 minutes or less is treated as the same active session.

Long idle periods are capped rather than being counted as active use.

The metric is therefore labeled:

Estimated active time with KESPA

rather than exact usage time.

Community leaderboard

The authenticated /leaderboard supports:

  • overall / KESPA Score;
  • total tokens;
  • chats;
  • messages;
  • estimated active time;
  • current streak;
  • longest streak;
  • approximate generated words.

Periods:

  • all time;
  • this month;
  • this week.

No prompts or conversation content are exposed.

KESPA Score v2

The original score used community-relative normalization, which produced a bad edge case when only one active user existed.

V2 replaced that with fixed-target logarithmic scaling.

Weights:

  • 35% tokens
  • 20% messages
  • 15% chats
  • 20% estimated active time
  • 10% current streak

Different targets are used for all-time, monthly, and weekly scoring.

That makes the score usable even when the community is still small.

Privacy controls

Leaderboard participation and public-profile sharing are separate settings in the existing users.settings JSON.

Defaults:

  • leaderboard visibility: enabled
  • public profile sharing: disabled

Public profile URL format:

/u/<username>

When public sharing is disabled, leaderboard avatars/usernames remain non-clickable.

Public-data boundary

Public profiles may expose safe aggregate information.

They do not expose:

  • prompts;
  • KESPA answers;
  • chat titles;
  • emails;
  • IP addresses;
  • private memories;
  • retrieved documents;
  • web URLs;
  • request IDs;
  • raw telemetry JSON;
  • private diagnostics;
  • conversation contents.

Architecture boundary

This feature required:

  • no brain_api.py changes
  • no NexLedger changes
  • no new statistics database table
  • no second telemetry pipeline

User/community statistics intentionally remain an application feature rather than externally attestable ledger evidence.

Validation

Functional validation confirmed:

  • /profile loads and scrolls;
  • /leaderboard loads;
  • ranking categories and periods work;
  • privacy toggles remove/re-add leaderboard users;
  • public profile sharing can be enabled/disabled;
  • /u/<username> resolves;
  • leaderboard identities link only when public sharing is enabled;
  • the activity heatmap follows real weekday alignment.

The primary PHP implementation files were also linted successfully.

Scalability note

Live aggregation is appropriate at current scale.

If KESPA grows substantially, the same public interface can later be backed by cached/materialized user statistics without changing the product contract.

TEXT

SHA256SUMS.txt

393 bytes SHA-256 bdbe9aa8e4bf43d2…
f2b5f659f6407dbb31907d0aef9eb72f0e93a3e5d5aeee0cd1e9fed81a207311  README.md
8278575e9dd0e9363ce25e20c81c7f82b4c55615a947984708727fc0a6ffd2a9  note.json
a37980eceb436da67f3e07a6fa4618d5eb372c3c5c9f02bf2cb07babcc650733  metrics.csv
f8447b05dada11ecd5802d94a3546c220ce6d6b75e07693c09583946b960b31c  methodology.md
7ca958f55b537e0944cbfb7ce83fee18f71839fa4a1bb5b07dda440ef5910827  provenance.json
MARKDOWN

methodology.md

1,312 bytes SHA-256 f8447b05dada11ec…

Methodology

Existing-data reuse

The profile/leaderboard service aggregates existing users, chats, messages, and forge_request_metrics data rather than introducing a second analytics pipeline.

Benchmark-tagged telemetry is excluded from user/community product statistics.

Activity estimation

Request timestamps are ordered chronologically.

Gaps of five minutes or less are treated as the same active session; longer gaps begin a new session and idle time is capped.

Score construction

KESPA Score v2 uses fixed-target log scaling rather than community-relative normalization.

Weights are 35% tokens, 20% messages, 15% chats, 20% estimated active time, and 10% current streak.

Separate target sets apply to weekly, monthly, and all-time periods.

Privacy model

Leaderboard visibility and public-profile visibility are independent settings stored in the existing users.settings JSON.

Public profiles render only safe aggregates and never expose prompts, responses, private memories, raw telemetry, request IDs, or conversation contents.

Validation

The implementation was tested across authenticated profile rendering, leaderboard sorting/periods, privacy toggles, public-profile routing, conditional leaderboard links, activity heatmap rendering, and PHP syntax validation.

CSV

metrics.csv

797 bytes SHA-256 a37980eceb436da6…
metric,value,unit_or_status
telemetry_requests,120,requests
tracked_chats,21,chats
tracked_user_messages,120,messages
tracked_forge_responses,119,responses
input_tokens_processed,278526,tokens
output_tokens_generated,24657,tokens
total_model_tokens,303183,tokens
activity_heatmap_window,182,days
same_session_gap_max,5,minutes
forge_score_tokens_weight,35,percent
forge_score_messages_weight,20,percent
forge_score_chats_weight,15,percent
forge_score_active_time_weight,20,percent
forge_score_current_streak_weight,10,percent
leaderboard_visible_default,YES,privacy
public_profile_default,NO,privacy
benchmark_telemetry_excluded,YES,product_stats
new_statistics_table,NO,architecture
second_telemetry_pipeline,NO,architecture
brain_api_modified,NO,boundary
nexledger_integration_added,NO,boundary
JSON

note.json

4,253 bytes SHA-256 8278575e9dd0e936…
{
    "schema": "kespa.public_technical_note.v1",
    "id": "KESPA-NOTE-016",
    "title": "Telemetry-Backed User Profiles, Community Scoring, and Privacy Controls",
    "date": "2026-09-15",
    "status": "verified",
    "purpose": "Document the completed KESPA user-profile and community analytics layer built directly on existing persisted telemetry and application data, including its privacy boundaries and scoring model.",
    "data_sources": [
        "users",
        "chats",
        "messages",
        "forge_request_metrics"
    ],
    "observed_history": {
        "telemetry_requests": 120,
        "tracked_chats": 21,
        "tracked_user_messages": 120,
        "tracked_forge_responses": 119,
        "input_tokens_processed": 278526,
        "output_tokens_generated": 24657,
        "total_model_tokens": 303183,
        "telemetry_history_begins_approximately": "2026-09-02"
    },
    "profile_features": [
        "Discord-backed identity",
        "account plan and admin state",
        "member-since and tracked-since dates",
        "leaderboard rank and KESPA Score",
        "chat/message/request aggregates",
        "input/output/total token statistics",
        "approximate generated-word count",
        "user-entered word count",
        "conversation averages and longest conversation",
        "estimated active time",
        "current and longest streaks",
        "most active day",
        "latency, TTFT, and tokens-per-second averages",
        "RAG/web/memory/review/cache/model/reasoning usage",
        "milestones",
        "182-day activity heatmap"
    ],
    "active_time_estimation": {
        "same_session_gap_max_minutes": 5,
        "long_idle_periods_capped": true,
        "presentation_label": "Estimated active time with KESPA"
    },
    "leaderboard": {
        "periods": [
            "all_time",
            "month",
            "week"
        ],
        "ranking_dimensions": [
            "KESPA Score",
            "total tokens",
            "chats",
            "messages",
            "estimated active time",
            "current streak",
            "longest streak",
            "approximate generated words"
        ],
        "benchmark_tagged_telemetry_excluded": true
    },
    "forge_score_v2": {
        "tokens_weight_percent": 35,
        "messages_weight_percent": 20,
        "chats_weight_percent": 15,
        "estimated_active_time_weight_percent": 20,
        "current_streak_weight_percent": 10,
        "scaling": "log-scaled against fixed targets",
        "period_specific_targets": true,
        "community_relative_normalization_removed": true
    },
    "privacy": {
        "leaderboard_visible_default": true,
        "public_profile_default": false,
        "settings_storage": "existing users.settings JSON",
        "leaderboard_visibility_and_public_profile_visibility_separate": true,
        "username_public_urls": "/u/<username>",
        "public_profile_safe_aggregates_only": true,
        "publicly_excluded": [
            "prompts",
            "KESPA answers",
            "chat titles",
            "emails",
            "IP addresses",
            "private memories",
            "retrieved documents",
            "web URLs",
            "request IDs",
            "raw telemetry JSON",
            "private diagnostics",
            "conversation contents"
        ]
    },
    "architecture_boundaries": {
        "new_statistics_table_created": false,
        "second_telemetry_pipeline_created": false,
        "brain_api_modified": false,
        "nexledger_integration_added": false,
        "user_community_stats_treated_as_ledger_evidence": false
    },
    "validation": [
        "/profile loads and scrolls",
        "/leaderboard loads",
        "leaderboard categories and periods work",
        "privacy toggle removes/re-adds user",
        "public profile sharing toggles correctly",
        "username-based /u/<username> resolves",
        "leaderboard links only when public sharing enabled",
        "activity heatmap uses actual weekday alignment",
        "primary PHP files lint successfully"
    ],
    "limitations": [
        "The displayed statistics are tracked-history metrics rather than absolute lifetime usage because telemetry retention extends farther back than retained chat/message rows.",
        "Estimated active time is session-derived rather than exact foreground application time.",
        "KESPA Score v2 uses fixed log-scaled targets and should be empirically recalibrated if the community becomes much larger.",
        "Live aggregation from existing telemetry is appropriate at current scale but may eventually need materialized/cached user statistics."
    ]
}
JSON

provenance.json

1,128 bytes SHA-256 7ca958f55b537e09…
{
    "schema": "kespa.public_provenance.v1",
    "research_id": "KESPA-NOTE-016",
    "source_basis": "KESPA User Profiles & Community Leaderboard completion record supplied by the project owner.",
    "source_observations": [
        "The completed feature uses existing users, chats, messages, and forge_request_metrics data.",
        "Observed history included 120 telemetry requests, 21 tracked chats, 120 user messages, 119 KESPA responses, and 303,183 total model tokens.",
        "KESPA Score v2 replaced community-relative normalization with fixed-target log scaling.",
        "Leaderboard visibility and public-profile sharing are independent controls stored in users.settings.",
        "Public profiles expose safe aggregate information only.",
        "No brain_api.py changes, NexLedger changes, new statistics table, or second telemetry pipeline were required."
    ],
    "publication_note": "This public note contains aggregate usage metrics, product architecture, score design, and privacy rules. It does not publish usernames, emails, prompts, answers, raw telemetry, private memories, request IDs, IP addresses, or conversation contents."
}