Produce a complete metrics definition doc — metric name, formula, data source, segmentation, SQL or event tracking spec, and what good/bad looks like.

MITAuto-check: notesProduct & Project Management

Install Lens Metrics

skills CLI
$ npx skills add jeremylongshore/tons-of-skills-marketplace --skill lens-metrics -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install jeremylongshore/tons-of-skills-marketplace lens-metrics --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/jeremylongshore/tons-of-skills-marketplace.git skills-src && mkdir -p .claude/skills && cp -r skills-src/plugins/ai-agency/tonone/skills/lens-metrics .claude/skills/lens-metrics && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
lens-metrics
GitHub stars
2.8k
Token cost
~2.8k tokens
SKILL.md length
474 words
Files
2
Skills in repo
3,342
Repo updated
First seen
Licence
MIT

At a glance

Produce a complete metrics definition doc — metric name, formula, data source, segmentation, SQL or event tracking spec, and what good/bad looks like.

  • Works in 8 steps: Detect Environment → Run the "So What?" Audit → Define the North Star Metric → …
  • Asked to define KPIs
  • SKILL.md covers Steps and Delivery
  • Instructions only: no scripts, shell commands, URLs or credentials in SKILL.md

What it does

Lens Metrics is an agent skill from jeremylongshore/tons-of-skills-marketplace. Produce a complete metrics definition doc — metric name, formula, data source, segmentation, SQL or event tracking spec, and what good/bad looks like. Given a product area, outputs the full metrics spec. Use when asked to "define KPIs", "metrics framework", "what should we measure", "north star metric", or "instrument this feature".

Its SKILL.md is about 2.8k tokens, which your agent loads only when the skill is triggered. The skill folder holds 2 other files (for example `.claude-plugin/plugin.json`).

It sits in Product & Project Management, covering Product metrics, OKRs and executive reporting and Product analytics. It works with SQL and dbt. The repository describes itself as: Model-agnostic agent-skills platform with a harness-free canonical layer, verified adapters, and the ccpi package manager. Explore at tonsofskills.com. The licence is MIT.

When your agent uses it

  • Asked to define KPIs
  • Metrics framework
  • What should we measure
  • North star metric

Example prompts

  • “define KPIs”
  • “metrics framework”
  • “what should we measure”
  • “/lens-metrics”

Requirements

  • Pre-approved tools (allowed-tools): Read, Write, Edit, Bash, Glob, Grep, WebFetch, WebSearch, Task, TodoWrite, AskUserQuestion

Workflow steps

8 steps, taken from the step headings in SKILL.md.

  1. Detect Environment
  2. Run the "So What?" Audit
  3. Define the North Star Metric
  4. Define Supporting KPIs (3–5 max)
  5. Write the SQL for Every Metric
  6. Write the Event Tracking Spec (if product analytics tool in use)
  7. Create SQL Views
  8. Deliver the Metrics Spec

What it can do on your machine

Read from SKILL.md and the folder at commit cfae287. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves these tools, so the agent can use them without asking each time:

    • Read
    • Write
    • Edit
    • Bash
    • Glob
    • Grep
    • WebFetch
    • WebSearch
    • Task
    • TodoWrite

    …and 1 more on the same allowed-tools line.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    No scripts in the folder and no shell commands in SKILL.md (its code samples are sql).

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Lens Metrics loads about 2.8k tokens when it runs. Until then it costs about 87 tokens; SKILL.md has 474 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~87
When it runs · the whole SKILL.md, loaded when a task matches
~2.8k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check: notes

The automated check noted patterns worth knowing about, such as sudo or a known installer.

  • NotePre-approves every shell command (allowed-tools: Bash)SKILL.md
    allowed-tools: Read, Write, Edit, Bash, Glob, Grep, WebFetch, WebSearch, Task, TodoWrite, AskUserQuestion

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from jeremylongshore/tons-of-skills-marketplace at commit cfae287, republished under its MIT licence (© jeremylongshore). 474 words, ~2,804 tokens.

Download SKILL.mdSave it as .claude/skills/lens-metrics/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.
name
lens-metrics
description
Produce a complete metrics definition doc — metric name, formula, data source, segmentation, SQL or event tracking spec, and what good/bad looks like. Given a product area, outputs the full metrics spec. Use when asked to "define KPIs", "metrics framework", "what should we measure", "north star metric", or "instrument this feature".
allowed-tools
Read, Write, Edit, Bash, Glob, Grep, WebFetch, WebSearch, Task, TodoWrite, AskUserQuestion
version
0.6.4
author
tonone-ai <hello@tonone.ai>
license
MIT

Define and Implement Metrics

You are Lens — the data analytics and BI engineer from the Engineering Team. A metric without a precise definition is a guess. A metric nobody acts on is noise.

Write the metrics spec. Write the SQL. Don't produce analytics strategy memos — produce definitions the engineering team can implement today.

Steps

Step 0: Detect Environment

Scan workspace for data infrastructure:

  • Database configs — PostgreSQL, BigQuery, Snowflake, ClickHouse, DuckDB
  • ORM/migration files — understand data model and available tables
  • Existing metrics — SQL views, dbt models, analytics queries, dashboard configs
  • dbt_project.yml — dbt metrics layer
  • Product analytics tools — Mixpanel, Amplitude, PostHog, GA4 configs
  • Existing definitions — metrics glossary, data dictionary, tracking plan

Identify what data is available, what schema exists, and what's already tracked.

Step 1: Run the "So What?" Audit

Before defining any metric, answer for each candidate:

  1. What decision does this metric inform? — Who looks at it, what do they do when it moves?
  2. What would you do if it doubled? — If "celebrate and keep going", maybe it's a north star.
  3. What would you do if it halved? — If a specific investigation path, it's a good operational metric.
  4. Is it leading or lagging? — Lagging confirms what happened. Leading predicts what will happen. Need both.

Cut any metric where the honest answer is "interesting." Need a decision, not curiosity.

Step 2: Define the North Star Metric

The ONE metric that best captures whether product delivers value to users.

Write in this exact format:

North Star: [Metric Name]
Definition: [Precise definition — what counts, what doesn't, what time window]
Formula:    [count / rate / ratio — expressed unambiguously]
Data source: [table.column or event name]
Why this:   [how it connects to actual product value delivered]
Target:     [what "good" looks like — absolute or growth rate]
Alert:      [what value triggers investigation]

Example:

North Star: Weekly Active Projects
Definition: Count of distinct projects with at least one edit, comment, or publish
            event in the last 7 rolling days. Excludes projects owned by internal
            test accounts (domain: @company.com).
Formula:    COUNT(DISTINCT project_id) WHERE last_activity >= NOW() - INTERVAL '7 days'
Data source: projects table + events table (event_type IN ('edit','comment','publish'))
Why this:   A project being actively worked on means the user is getting value.
            Signups and logins measure intent; project activity measures delivery.
Target:     15% week-over-week growth in first 6 months
Alert:      < -5% week-over-week for 2 consecutive weeks
Step 3: Define Supporting KPIs (3–5 max)

Levers that explain why the north star moves. Each one in full:

Metric: [Name]
Definition: [Precise — no wiggle room. "Active" must specify exactly what active means.]
Formula:    [Exact calculation]
Data source: [table(s) and columns]
Segment by: [dimensions that matter — plan, cohort, channel, geography, device]
Leading/lagging: [leading = predicts future | lagging = confirms past]
Good:       [threshold — what triggers positive action]
Bad:        [threshold — what triggers investigation]
Owner:      [team or role responsible for moving this]
SQL:        [see Step 4]

Common KPI categories for product:

  • Acquisition: new signups, activation rate, time-to-first-value
  • Engagement: DAU/WAU/MAU ratio, feature adoption rate, session depth
  • Retention: D1/D7/D30 retention, weekly cohort retention curves, churn rate
  • Monetization: conversion to paid, MRR, expansion revenue, LTV
  • Quality: error rate, p95 latency, support ticket volume per active user
Show full SKILL.md (163 more words)Show less
Step 4: Write the SQL for Every Metric

Write production-quality SQL for each metric. Each query:

  • Has a comment header with business definition
  • Uses CTEs, not nested subqueries
  • Is parameterized by date range where appropriate
  • Handles NULLs and division-by-zero explicitly

Retention curve (D1/D7/D30):

sql
-- User Retention by Signup Cohort
-- For each weekly cohort, % of users still active at D1, D7, D30
-- "Active" = any event in the events table (not just login)
WITH cohorts AS (
    SELECT
        user_id,
        DATE_TRUNC('week', created_at) AS cohort_week
    FROM users
    WHERE created_at >= NOW() - INTERVAL '90 days'
),
activity AS (
    SELECT DISTINCT
        e.user_id,
        DATE_TRUNC('day', e.created_at) AS active_day
    FROM events e
    WHERE e.created_at >= NOW() - INTERVAL '90 days'
)
SELECT
    c.cohort_week,
    COUNT(DISTINCT c.user_id)                                        AS cohort_size,
    COUNT(DISTINCT CASE
        WHEN a.active_day BETWEEN
            (MIN(u.created_at)::date + 1) AND
            (MIN(u.created_at)::date + 1)
        THEN a.user_id END)                                          AS retained_d1,
    COUNT(DISTINCT CASE
        WHEN a.active_day BETWEEN
            (MIN(u.created_at)::date + 7) AND
            (MIN(u.created_at)::date + 7)
        THEN a.user_id END)                                          AS retained_d7,
    COUNT(DISTINCT CASE
        WHEN a.active_day BETWEEN
            (MIN(u.created_at)::date + 30) AND
            (MIN(u.created_at)::date + 30)
        THEN a.user_id END)                                          AS retained_d30,
    ROUND(COUNT(DISTINCT CASE WHEN a.active_day =
        MIN(u.created_at)::date + 1 THEN a.user_id END)
        ::numeric / NULLIF(COUNT(DISTINCT c.user_id), 0) * 100, 1)  AS d1_pct,
    ROUND(COUNT(DISTINCT CASE WHEN a.active_day =
        MIN(u.created_at)::date + 7 THEN a.user_id END)
        ::numeric / NULLIF(COUNT(DISTINCT c.user_id), 0) * 100, 1)  AS d7_pct,
    ROUND(COUNT(DISTINCT CASE WHEN a.active_day =
        MIN(u.created_at)::date + 30 THEN a.user_id END)
        ::numeric / NULLIF(COUNT(DISTINCT c.user_id), 0) * 100, 1)  AS d30_pct
FROM cohorts c
JOIN users u ON u.user_id = c.user_id
LEFT JOIN activity a ON a.user_id = c.user_id
GROUP BY 1
ORDER BY 1 DESC;

Activation rate:

sql
-- Activation Rate
-- Definition: % of users who reach "activated" state within 7 days of signup
-- "Activated" = completed onboarding + created at least 1 project
-- Why 7 days: users who don't activate within a week rarely return
WITH signups AS (
    SELECT user_id, created_at AS signed_up_at
    FROM users
    WHERE created_at >= NOW() - INTERVAL '30 days'
),
activations AS (
    SELECT DISTINCT user_id
    FROM events
    WHERE event_type = 'project_created'
),
onboarded AS (
    SELECT DISTINCT user_id
    FROM events
    WHERE event_type = 'onboarding_complete'
)
SELECT
    COUNT(DISTINCT s.user_id)                               AS signups,
    COUNT(DISTINCT a.user_id)                               AS activated,
    ROUND(
        COUNT(DISTINCT a.user_id)::numeric /
        NULLIF(COUNT(DISTINCT s.user_id), 0) * 100, 1
    )                                                       AS activation_rate_pct
FROM signups s
LEFT JOIN activations a  ON a.user_id = s.user_id
LEFT JOIN onboarded   ob ON ob.user_id = s.user_id;

Weekly engagement ratio (DAU/WAU):

sql
-- Engagement Ratio: DAU / WAU
-- Measures stickiness — how often weekly actives return daily
-- Benchmark: consumer apps target > 20%, B2B SaaS > 15%
WITH dau AS (
    SELECT COUNT(DISTINCT user_id) AS value
    FROM events
    WHERE created_at::date = CURRENT_DATE - 1  -- yesterday
),
wau AS (
    SELECT COUNT(DISTINCT user_id) AS value
    FROM events
    WHERE created_at >= CURRENT_DATE - 7
)
SELECT
    dau.value                                           AS dau,
    wau.value                                           AS wau,
    ROUND(dau.value::numeric / NULLIF(wau.value, 0) * 100, 1) AS engagement_ratio_pct
FROM dau, wau;
Step 5: Write the Event Tracking Spec (if product analytics tool in use)

For each metric requiring instrumented events (Mixpanel, Amplitude, PostHog, GA4), write tracking spec:

Event: project_created
Trigger: user clicks "Create Project" and the project is successfully saved
Properties:
  - project_id: string (UUID)
  - project_type: enum ['blank', 'template', 'imported']
  - user_id: string (UUID)
  - org_id: string (UUID)
  - plan: enum ['free', 'pro', 'enterprise']
  - created_at: ISO 8601 timestamp
Do NOT fire: on project duplication (use project_duplicated event instead)
Owner: [team responsible for instrumentation]
Step 6: Create SQL Views

Create SQL view file for each metric so any BI tool can query it directly:

sql
-- metrics/activation_rate.sql
CREATE OR REPLACE VIEW metrics.activation_rate AS
SELECT
    DATE_TRUNC('week', u.created_at)  AS cohort_week,
    COUNT(DISTINCT u.user_id)         AS signups,
    COUNT(DISTINCT e.user_id)         AS activated,
    ROUND(
        COUNT(DISTINCT e.user_id)::numeric /
        NULLIF(COUNT(DISTINCT u.user_id), 0) * 100,
    1)                                AS activation_rate_pct
FROM users u
LEFT JOIN events e
       ON e.user_id = u.user_id
      AND e.event_type = 'project_created'
      AND e.created_at <= u.created_at + INTERVAL '7 days'
GROUP BY 1
ORDER BY 1 DESC;
Step 7: Deliver the Metrics Spec

Output complete metrics definition document. Follow the output format defined in docs/output-kit.md — 40-line CLI max, box-drawing skeleton, unified severity indicators, compressed prose.

┌─ Metrics Spec: [Product Area] ─────────────────────────┐
│  Stage: [early/growth/mature]   Data source: [stack]   │
└────────────────────────────────────────────────────────┘

NORTH STAR
  [Metric Name]
  [Definition in one sentence]
  Target: [value]   Alert: [threshold]

KPIS (3–5)
──────────────────────────────────────────────────────────
  Metric              Definition              Target    Owner
  ──────────────────  ──────────────────────  ────────  ─────
  [name]              [precise definition]    [value]   [who]
  [name]              [precise definition]    [value]   [who]

IMPLEMENTED
  [N] SQL views → [location]
  [N] Event specs → [tracking plan location]
  Metrics doc → [path]

MISSING DATA
  [any metric that requires instrumentation not yet in place]

RULE
  Every metric has: precise definition, SQL query, target, owner.
  Missing any one of those? It's not a metric — it's a guess.

Delivery

If output exceeds the 40-line CLI budget, invoke /atlas-report with the full findings. The HTML report is the output. CLI is the receipt — box header, one-line verdict, top 3 findings, and the report path. Never dump analysis to CLI.

© jeremylongshore, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 1 other file in plugins/ai-agency/tonone/skills/lens-metrics of jeremylongshore/tons-of-skills-marketplace.

  • SKILL.md
  • .claude-plugin/plugin.json

Open the folder on GitHubat commit cfae287

Compare with similar skills

Lens Metrics next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Lens Metrics compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Lens Metrics this skilljeremylongshore/tons-of-skills-marketplace2.8k—~2.8kAutomated safety check: NotesMIT
Product Metrics Dashboard Designphuryn/pm-skills27k—~1.3kAutomated safety check: PassMIT
Analytics Engineerborghei/Claude-Skills891—~3.4kAutomated safety check: PassMIT
dbt Snowflake to BigQuery Translatorgoogle/skills21k—~2.7kAutomated safety check: PassApache-2.0
Monte Carlo Validation Notebooksickn33/agentic-awesome-skills47k1 repos~1.1kAutomated safety check: PassMIT
Snowflake Developmentsickn33/agentic-awesome-skills47k2 repos~2.1kAutomated safety check: PassMIT

Similar skills

  • Designs a product metrics dashboard: a North Star and input metrics, a definition table with data sources, chart types and alert thresholds, and a screen layout.

    27k GitHub stars~1.3k tokensUpdated yesterday
    Product & Project ManagementAuto-check passed
  • Analytics Engineer

    borghei/Claude-Skills

    Analytics engineering across data modeling, dbt, transformation, and semantic layers.

    891 GitHub stars~3.4k tokensUpdated 4 days ago
    Data & AnalyticsAuto-check passed
  • Translates Snowflake dbt SQL models into standardized BigQuery SQL, keeping Jinja constructs and tracking progress in a migration tasks file.

    21k GitHub stars~2.7k tokensUpdated yesterday
    DatabasesAuto-check passed
  • Monte Carlo Validation Notebook

    sickn33/agentic-awesome-skills

    Generates SQL validation notebooks for dbt PR changes with before/after comparison queries.

    47k GitHub starsUsed in 1 repo~1.1k tokens
    Data & AnalyticsAuto-check passed
  • Snowflake Development

    sickn33/agentic-awesome-skills

    Comprehensive Snowflake development assistant covering SQL best practices, data pipeline design (Dynamic Tables, Streams, Tasks, Snowpipe), Cortex AI functions, Cortex Agents, Snowpark Python, dbt…

    47k GitHub starsUsed in 2 repos~2.1k tokens
    DatabasesAuto-check passed
  • Snowflake Development

    alirezarezvani/claude-skills

    A skill your agent uses when writing Snowflake SQL, building data pipelines with Dynamic Tables or Streams/Tasks, using Cortex AI functions, creating Cortex Agents, writing Snowpark Python…

    28k GitHub stars~3.2k tokensUpdated 1 mo ago
    DatabasesAuto-check passed

More from jeremylongshore/tons-of-skills-marketplace

All 3,342 skills in this repo
  • Performing Security Code Review

    jeremylongshore/tons-of-skills-marketplace

    Execute this skill enables AI assistant to conduct a security-focused code review using the security-agent plugin.

    2.8k GitHub starsUsed in 2 repos~1.3k tokens
    Auto-check: notes
  • Adapting Transfer Learning Models

    jeremylongshore/tons-of-skills-marketplace

    Build this skill automates the adaptation of pre-trained machine learning models using transfer learning techniques.

    2.8k GitHub stars~1.1k tokensUpdated today
    Auto-check passed
  • Agent Context Loader

    jeremylongshore/tons-of-skills-marketplace

    Execute proactive auto-loading: automatically detects and loads agents.md files.

    2.8k GitHub stars~1.1k tokensUpdated today
    Auto-check passed
  • Aggregating Performance Metrics

    jeremylongshore/tons-of-skills-marketplace

    Aggregate and centralize performance metrics from applications, systems, databases, caches, and services.

    2.8k GitHub stars~1.2k tokensUpdated today
    Auto-check passed
  • Analyzing Capacity Planning

    jeremylongshore/tons-of-skills-marketplace

    Execute this skill enables AI assistant to analyze capacity requirements and plan for future growth.

    2.8k GitHub stars~947 tokensUpdated today
    Auto-check passed
  • Analyzing Database Indexes

    jeremylongshore/tons-of-skills-marketplace

    Process use when you need to work with database indexing. An agent skill from jeremylongshore/tons-of-skills-marketplace.

    2.8k GitHub stars~2k tokensUpdated today
    Auto-check passed

Works with

Questions about Lens Metrics

What does Lens Metrics do?

Produce a complete metrics definition doc — metric name, formula, data source, segmentation, SQL or event tracking spec, and what good/bad looks like. Lens Metrics is an agent skill from jeremylongshore/tons-of-skills-marketplace. Produce a complete metrics definition doc — metric name, formula, data source, segmentation, SQL or event tracking spec, and what good/bad looks like.

When should I use Lens Metrics?

Lens Metrics fits situations like: asked to define KPIs; metrics framework; what should we measure; north star metric.

How do I install Lens Metrics in Claude Code?

Run `npx skills add jeremylongshore/tons-of-skills-marketplace --skill lens-metrics -a claude-code`. Or copy the skill folder (plugins/ai-agency/tonone/skills/lens-metrics in jeremylongshore/tons-of-skills-marketplace) into .claude/skills/lens-metrics in your project. Claude Code loads it when a task matches its description.

How do I install Lens Metrics in Codex?

Run `npx skills add jeremylongshore/tons-of-skills-marketplace --skill lens-metrics -a codex`. Or copy the skill folder (plugins/ai-agency/tonone/skills/lens-metrics in jeremylongshore/tons-of-skills-marketplace) into .agents/skills/lens-metrics in your project. Codex loads it when a task matches its description.

Can I use Lens Metrics in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add jeremylongshore/tons-of-skills-marketplace --skill lens-metrics -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/lens-metrics, .gemini/skills/lens-metrics, .github/skills/lens-metrics and .opencode/skills/lens-metrics in your project.

What does Lens Metrics need to run?

SKILL.md names no scripts, command-line tools or credentials: Lens Metrics is instructions for the agent only. Its frontmatter pre-approves these tools: Read, Write, Edit, Bash, Glob, Grep, WebFetch, WebSearch, Task, TodoWrite, AskUserQuestion.

Does Lens Metrics access the network?

SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.

Is Lens Metrics safe to install?

Our automated static check of SKILL.md found notes only (pre-approves every shell command (allowed-tools: bash)), nothing it rates as a warning. It is not a guarantee. Review the folder before installing.

What licence does Lens Metrics use?

Lens Metrics is published under the MIT licence (declared in SKILL.md). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Lens Metrics use?

About 2.8k tokens (SKILL.md is roughly 11k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Lens Metrics?

Skills that share tags, products or a category with Lens Metrics: Product Metrics Dashboard Design (phuryn/pm-skills, 27k stars), Analytics Engineer (borghei/Claude-Skills, 891 stars), dbt Snowflake to BigQuery Translator (google/skills, 21k stars) and Monte Carlo Validation Notebook (sickn33/agentic-awesome-skills, 47k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Lens Metrics?

jeremylongshore (a GitHub user) maintains it in jeremylongshore/tons-of-skills-marketplace, which has 2,827 GitHub stars. The repository holds 3,342 skills in this directory. The repository was last updated on October 10, 2026.

Source: jeremylongshore/tons-of-skills-marketplace on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.