From awesome-stock-skills
Publishes equity research reports from stock-research-pipeline as professional PDF or magazine-quality HTML, optionally deploys HTML to Netlify for live URL.
npx claudepluginhub samyakjain0606/awesome-stock-skillsThis skill uses the workspace's default tool permissions.
Take the analysis outputs produced by `stock-research-pipeline` and turn them into a deliverable
Guides Next.js Cache Components and Partial Prerendering (PPR): 'use cache' directives, cacheLife(), cacheTag(), revalidateTag() for caching, invalidation, static/dynamic optimization. Auto-activates on cacheComponents: true.
Processes PDFs: extracts text/tables/images, merges/splits/rotates pages, adds watermarks, creates/fills forms, encrypts/decrypts, OCRs scans. Activates on PDF mentions or output requests.
Share bugs, ideas, or general feedback.
Take the analysis outputs produced by stock-research-pipeline and turn them into a deliverable
the user can read or share. Two output modes — PDF (print-style) or HTML (web-style with optional
Netlify deploy). The user picks.
stock-research-pipeline are available in this session OR can be re-derived from
data/companies/{SYMBOL}/. If neither is true, run /stock-research-pipeline {SYMBOL} first..venv/ with reportlab installed.netlify CLI on PATH OR a Netlify access token in $NETLIFY_AUTH_TOKEN.
If the CLI is missing, the skill installs it (with user confirmation) — see Step 4 pre-flight.
Requires npm on PATH (Node ≥ 18).Use AskUserQuestion with one question, three options:
Also ask whether to deploy the HTML to Netlify if HTML is selected (yes / no). Do not branch
on whether netlify is installed at this stage — the Step 4 pre-flight handles install + auth +
site name + deploy scope interactively.
Do not proceed until you have explicit answers. No defaults.
Resolve the SYMBOL from the user's request and gather the 6 NLM answers. Sources, in order:
/stock-research-pipeline just ran in this session).data/companies/{SYMBOL}/analysis/ — look for any of:
business_model.md, industry.md, management.md, financials.md, growth_triggers.md,
risks_scenarios.md, or a single nlm_answers.json if the pipeline saved one.data/companies/{SYMBOL}/analysis/notebook.txt if present.If you can't gather all 6 answers, stop and ask the user to run /stock-research-pipeline first.
Also load data/companies/{SYMBOL}/screener_data.md for headline metrics (PE, ROE, ROCE, market
cap, latest revenue/PAT) — these populate the KPI cards.
Use the existing reportlab generator at scripts/generators/equity_report_pdf.py (or, if absent,
the working reference at data/companies/GRAVITA/analysis/generate_report.py). Render to:
data/companies/{SYMBOL}/analysis/{SYMBOL}_Equity_Analysis_{YYYY-MM-DD}.pdf
Then open the file and tell the user the path. Done if PDF-only was chosen.
Generate a single self-contained .html file (no external assets except Google Fonts and one
optional Mermaid CDN). Apply the visual-explainer playbook — these are not suggestions.
Aesthetic — pick ONE per generation. Vary across runs.
#faf7f5 background, terracotta + sage accents. Good for
consumer / FMCG names where warmth fits.Forbidden — do not produce these.
--font-body. Pick a real pairing.#8b5cf6, #7c3aed, #a78bfa), cyan-magenta-pink neon, gradient text
on headings.Required structure (mirror the PDF section list, but use web idioms):
graph LR (≤6 nodes) with the full
diagram-shell zoom container — never bare <pre class="mermaid">.<table> on right (sticky header, alternating rows, right-aligned numbers
with tabular-nums).<table> for the quarterly P&L. Add a Chart.js
line chart for revenue + margin trajectory if 4+ quarters available. Margin trend gets its
own KPI callout.<table> with at least these columns: factor | consensus view (with a
sourceable anchor — sell-side target, peer multiple, prior management commentary) |
variant view (the differentiated take) | quantitative evidence (specific numbers, dates,
data points that support variant) | edge size (in EPS / multiple / target terms — i.e. how
much this factor moves the price if right) | time horizon (when this should resolve) |
falsification (what would prove the variant wrong).
(c) A minimum of 5 factors, not 3. Cover at least: valuation multiple, the most-feared
risk (commodity / cyclical / regulatory), execution / capex, demand durability, and one
sector-specific factor.
(d) Below the table, a short "consensus build vs variant build" comparison — two side-by-side
mini-tables showing the EPS/revenue/multiple stack each view implies for the next 2 years.<table> below the cards, with scenarios as columns and rows
covering at minimum: Revenue FY+1/+2/+3, Revenue CAGR, EBITDA FY+3, EBITDA margin %,
PAT FY+3, EPS FY+3, EPS CAGR, exit P/E multiple, target price, implied return %,
and probability. Numbers are right-aligned with tabular-nums. Header row tinted to match
the scenario card colors so the table is visually anchored to the cards above.
(c) A scenario assumptions sub-table listing the 4–6 key driver assumptions per
scenario (e.g. for a recycler: spread per kg, capacity utilization %, organized share %,
non-core revenue mix, tax rate). This makes the scenarios reproducible — the reader can
challenge any single assumption.
(d) A probability-weighted target line below the table, with the math shown explicitly
(e.g. 0.20 × 1,500 + 0.55 × 2,400 + 0.25 × 3,500 = 2,495). Show the implied upside vs CMP.
(e) A short "what moves us between scenarios" note — 2–3 bullets describing the specific
observable that would shift the base case toward bull or bear.Page mechanics
references/responsive-nav.md pattern.@media (prefers-color-scheme). Both must look intentional.fadeUp on cards via --i CSS variable; respect prefers-reduced-motion.min-width: 0 to prevent overflow on narrow viewports.font-variant-numeric: tabular-nums).Output location
data/companies/{SYMBOL}/analysis/{SYMBOL}_Equity_Analysis_{YYYY-MM-DD}.html
After writing, open the file locally so the user can preview before deploy.
This step has two phases: a pre-flight that gathers everything Netlify needs from the user
(CLI, auth, site name, deploy scope), then the deploy itself. Do not skip the pre-flight —
it produces the variables the deploy command consumes. Each AskUserQuestion below is
mandatory; do not invent defaults the user did not pick.
command -v netlify >/dev/null 2>&1 && netlify --version
If the command is missing, ask the user via AskUserQuestion:
Netlify CLI is not installed. Install it now?
- Install globally — runs
npm install -g netlify-cli(one-time, ~30 MB). Requires npm.- Install locally to project — runs
npm install --save-dev netlify-cliand usesnpx netlifythereafter. No global pollution.- Skip deploy — keep HTML local only, print manual install + deploy commands.
If the user picks an install option:
command -v npm — if missing, abort with the Node install link
(https://nodejs.org/) and fall back to "skip deploy".EACCES, do NOT use sudo automatically — instead tell the
user to either fix npm prefix (npm config set prefix ~/.npm-global) or pick local install
instead, then re-ask.netlify --version to confirm.netlify status --json 2>/dev/null
If the JSON shows "NetlifyUser" with an email, the user is authed — continue.
If not authed, ask via AskUserQuestion:
Netlify needs to authenticate. Which method?
- Interactive login — runs
netlify login, opens a browser, paste-back token flow. Best for personal use.- Personal access token — paste a token from
https://app.netlify.com/user/applications#personal-access-tokens. Best for CI / scripted use. The skill will exportNETLIFY_AUTH_TOKENfor the session and remind the user to add it to their shell profile if they want it persistent.- Skip deploy — same as above, keep local only.
If interactive login: run netlify login (it opens the browser; the user pastes the auth code
back into the terminal). Wait for it to complete. Re-check netlify status.
If token: prompt the user to paste the token (do NOT log it; treat it like a password). Set it in the current shell only:
export NETLIFY_AUTH_TOKEN="<token>"
Tell the user this is session-scoped — to make it persistent, they should add the export to
~/.zshrc or use a tool like direnv themselves. Do not modify their shell profile without
explicit permission.
Ask via AskUserQuestion:
What site name should this report deploy to? (becomes the public URL:
https://{name}.netlify.app)
- Default —
{symbol-lower}-equity-{yyyymmdd}— date-stamped, new URL per run. Good for ad-hoc reports.- Stable per-symbol —
{symbol-lower}-equity— reused on every re-publish for this stock. Good if you want a consistent URL to share.- Custom — user supplies the name (must be globally unique on netlify.app).
- Reuse existing site — only offer this option if
data/companies/{SYMBOL}/analysis/netlify_site.txtexists with a previously-deployed site name; auto-fill it.
After the user picks, save the chosen site name to
data/companies/{SYMBOL}/analysis/netlify_site.txt so future runs can offer "reuse existing".
Ask via AskUserQuestion:
Deploy as production or preview?
- Production (
--prod) — replaces the live URL with this build. Use for the canonical version.- Preview — creates a one-off
https://<hash>--{site}.netlify.appURL that won't replace prod. Good for sharing a draft for feedback before publishing.
Stage the HTML, ensure the site exists, deploy.
DEPLOY_DIR=$(mktemp -d)
trap 'rm -rf "$DEPLOY_DIR"' EXIT
cp "data/companies/{SYMBOL}/analysis/{SYMBOL}_Equity_Analysis_{YYYY-MM-DD}.html" \
"$DEPLOY_DIR/index.html"
SITE_NAME="<from 4.3>"
# Create site if it doesn't exist (idempotent — ignore "already exists")
netlify sites:create --name "$SITE_NAME" 2>/dev/null || true
# Deploy
PROD_FLAG="<--prod or empty per 4.4>"
netlify deploy --dir="$DEPLOY_DIR" --site="$SITE_NAME" $PROD_FLAG \
--message "Equity report {SYMBOL} {YYYY-MM-DD}"
Parse the output for Website URL (production) or Website Draft URL (preview). Print:
✓ Published to Netlify
Live URL: https://{site-name}.netlify.app # or the draft URL
Local: data/companies/{SYMBOL}/analysis/{SYMBOL}_Equity_Analysis_{YYYY-MM-DD}.html
Site name: {site-name} (saved to netlify_site.txt for reuse)
Always show this before running 4.5, even if the user already opted into deploy:
Netlify URLs are public and crawlable. This report contains analysis of {SYMBOL} based on public concalls and screener data — no proprietary data — but if you've added private notes or internal commentary to the HTML, abort the deploy now.
If the user has not seen this warning in this session, ask one final yes/no confirmation before
calling netlify deploy.
Report back, in 3–4 lines max:
Before claiming done, mentally run the visual-explainer checks:
If two or more slop signals are present, regenerate with a different aesthetic.
/stock-research-pipeline first.pip install reportlab in the venv, then retry.AskUserQuestion whether to
install globally (npm install -g netlify-cli), install locally to project, or skip deploy.
Never auto-install without asking.npm is not on PATH, abort the
install and fall back to "skip deploy" with a pointer to https://nodejs.org/.sudo. Show the user the npm-prefix
fix (npm config set prefix ~/.npm-global + add to PATH) or offer the local install path,
then re-ask.netlify login or paste
a personal access token.NETLIFY_AUTH_TOKEN for the session only. Tell the user how to make it persistent
themselves; never edit ~/.zshrc automatically.-v2, -v3) or pick a new name.User: "publish the GRAVITA report"
User: "deploy the GRAVITA report to netlify"
User: "I want an html version of the TCS report"
User: "/stock-research-publish RELIANCE"