diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..4434d4e --- /dev/null +++ b/Dockerfile @@ -0,0 +1,39 @@ +FROM python:3.10-slim + +WORKDIR /app + +# 2026-09-09 (Glama.ai MCP server listing requirement, per the +# awesome-mcp-servers PR feedback): Glama builds and runs this Dockerfile +# directly to verify the MCP server actually starts and responds to +# introspection requests, rather than only checking the live production +# URL. Kept intentionally minimal/production-only -- no ffmpeg/fonts (the +# Video Engine's own is_available() check already degrades gracefully +# without them, same as on Railway if that apt layer were ever missing) +# and no requirements-dev.txt (test-only deps, irrelevant to booting the +# app). +# +# build-essential is included defensively in case QuantLib (a compiled +# C++ library with Python bindings) doesn't ship a prebuilt wheel for +# whatever platform Glama builds on -- without it, that one line in +# requirements.txt could fail to install and take the whole build down. +RUN apt-get update && apt-get install -y --no-install-recommends \ + build-essential \ + && rm -rf /var/lib/apt/lists/* + +COPY requirements.txt . +RUN pip install --no-cache-dir -r requirements.txt + +COPY . . + +# Same placeholder pattern already proven in .github/workflows/ci.yml: +# services/news_service.py's NewsService.__init__ only checks that +# NEWS_API_KEY is *present* at import time -- it never calls the real +# NewsAPI just to let backend.main import successfully. Real deployments +# (Railway) set a genuine key via their own env vars; this container only +# needs to boot and answer MCP introspection, not serve real news data. +ENV NEWS_API_KEY=docker-build-placeholder-not-a-real-key +ENV PORT=8000 + +EXPOSE 8000 + +CMD ["sh", "-c", "PYTHONPATH=/app uvicorn backend.main:app --host 0.0.0.0 --port ${PORT}"] diff --git a/directory-submissions-tracker.md b/directory-submissions-tracker.md new file mode 100644 index 0000000..e5d088d --- /dev/null +++ b/directory-submissions-tracker.md @@ -0,0 +1,72 @@ +# XFINLAB — Directory / Marketplace Submission Tracker + +Last updated: 2026-09-05 + +## ✅ Live / Published + +| Platform | Status | Listing URL | Notes | +|---|---|---|---| +| RapidAPI | Live, Public | rapidapi.com/studio (XFINLAB Intelligence API project) | Pro tier $29/mo, PayPal payout linked. Check: subscriber count, any reviews needing reply. | +| Postman API Network | Live, Public workspace | Postman — "XFINLAB Intelligence" workspace | OpenAPI imported, all endpoints visible. Check: any forks/usage. | +| Smithery.ai (MCP) | Published | smithery.ai — abcoaj888/xfinlab-intelligence | Scan SUCCESS, 5 tools found, header auth confirmed working. Check: install/call count. | +| LaunchNest | Live, badge published | launchnest.io/p/xfinlab-intelligence-api | Verification badge added to intelligence-api.html. Check: upvotes/comments. | +| NxGn Tools | Live | nxgntools.com/tools/xfinlab-intelligence-api | Confirmed via "Tool Queued for Launch" email. Check: listing went fully live. | +| AlternativeTo.net | Pending review (submission queue) | alternativeto.net/software/xfinlab-intelligence-api | Submitted 2026-09-04. Alternatives added: Robur Terminal + others. Queue can take a while — check "My submissions" for status. | +| SaaSHub.com | **Approved** (2026-09-09 email) | saashub.com (search "XFINLAB") | Live. Email offered optional free "Verify now" (ownership verification, gets a verified badge) and a paid "Premium Listing" upsell — skip the premium one, verify is optional/AJ's call. | +| SaasHunt.ai | Submitted, pending review | saashunt.ai (search "XFINLAB Intelligence API") | India-focused audience. Reviewed within 3-5 business days per their site. | +| KittyLaunch | Draft saved, badge verified live | kittylaunch.com/p/xfinlab-intelligence-api | Free launch tier. Badge confirmed live on intelligence-api.html — verify + publish from dashboard. | +| LaunchIgniter | In progress (Free tier) | launchigniter.com | Free tier chosen (not the $12/$15 paid options) — requires badge + review queue. | +| PeerPush | Submitted | peerpush.com | Free listing. API docs URL linked (openapi.json). Optimized for AI search (ChatGPT/Perplexity/Claude discovery). | + +## ⏳ Stuck / needs another attempt + +| Platform | Status | URL | Notes | +|---|---|---|---| +| DevHub.best | Badge confirmed live, verify flaky | devhub.best/projects/xfinlab-intelligence-api | Badge is genuinely live on intelligence-api.html (confirmed via direct fetch, both www and non-www). Their own "Verify Backlink" step keeps failing and the submission form loses progress on refresh — this is DevHub's bug, not ours. Retry in a day or two. Declined their "Amplify Your Launch" upsell (10-platform bundle) and "DR Booster" paid service, and skipped "Boost Domain Rating" (looks like a paid link-scheme service, not a real directory). | + +## ⏳ Not yet submitted (deprioritized, still worth doing) + +Optional/low-priority extras seen in DevHub's "Amplify Your Launch" panel — all free, all modest DR (32-40), low urgency: Smol Hunt, TinyHunt, Smol LaunchPad, Smol Saas, Smol List, Find Tool For, ShipThing. Fine to do opportunistically, not worth blocking on. + +## ⚠️ Reddit account-wide content filter (2026-09-05 — important, changes the plan) + +Checked the account's own post history (u/labuobuo profile → Posts tab) and found **all 4 posts made this week are showing "Reddit's content filter has removed this post"** — not just r/datasets and r/webdev, but also both older r/SideProject posts that were assumed live. This is NOT a per-subreddit mod issue (flair, karma-per-sub) — it's Reddit's site-wide anti-spam system flagging the account itself, almost certainly because a brand-new account posted the same GitHub/website links across 4 different subreddits within a few days, which is a classic promotional-spam signature. + +Revised plan: +1. **Pause posting anything with links for a few days** — let the account's spam-flag heat cool down. +2. Spend this window doing **pure, link-free comments** on other people's threads (see the r/algotrading + r/datasets suggested threads above) to build a genuine activity history. +3. When resuming posts later, **spread them out over time** (not multiple subs in one week) and vary the content/links used — repeating the same URL across many subs in a short window is what likely triggered this. +4. Re-check the Posts tab periodically — if a post's filter banner disappears and it starts showing real comment counts, that one's been cleared. + +## Reddit posts + +| Subreddit | Status | Notes | +|---|---|---| +| r/SideProject | Posted 2026-09-04 | AMA-style post about the build. Reply to comments for 2-3 hours after posting. | +| r/webdev | Posted 2026-09-05 (Showoff Saturday), auto-removed by content filter | Same account-wide Reddit content-filter issue as r/datasets/r/SideProject below, not a per-subreddit rule violation. r/webdev restricts self-promo to the weekly "Showoff Saturday" megathread anyway — do not post standalone. Next real Showoff Saturday: 2026-09-12 (2026-09-06 was a Sunday, not a Saturday — earlier note here had the date wrong). Plan: same as r/algotrading/r/datasets — build genuine comment history first, then retry on 2026-09-12. | +| r/algotrading | Blocked — account doesn't meet activity requirements | Reddit rejected the post: account needs more karma/activity history before it can post here. Plan: leave genuine (non-promotional) comments on other threads for 1-2 weeks first — see suggested threads below — then retry the draft in reddit-post-drafts.md. | +| r/datasets | Blocked — same account-activity issue | Post itself went up (flaired [self-promotion]/resource, got 1 upvote + 1 comment) but was auto-removed by Reddit's content filter. Tried modmail via old-style compose link (`reddit.com/message/compose?to=/r/datasets`) — got "You can't message that user", same root cause as r/algotrading (account too new/low karma, blocks modmail too, not just posting). Plan: same as r/algotrading — build genuine comment history first, then retry both the post and modmail. | + +Suggested threads to leave genuine comments on (no product mention) to build account standing — doing these across subs is fine since it's overall account karma/age that's gating, not just per-subreddit: +- r/algotrading — u/laurenthu — "Reconciling a signal pipeline against the broker: delay, data basis, and intra-bar noise" +- r/algotrading — u/Own-Lingonberry-549 — "What are the biggest engineering challenges when building production-grade algorithmic trading systems?" +- r/algotrading — u/Haunting-Rooster5354 — "Does yfinance update foreign stocks data?" +- r/datasets — u/GenchiJapan — "Japan's tourist rules as a dataset" (posted 2026-09-05) — genuine comment opportunity: ask/comment on the licensing (CC BY 4.0) or how they verify per-row "verified date" freshness, since that's directly relevant to XFINLAB's own null-vs-stale data philosophy without mentioning XFINLAB at all. + +## Cold-email pitches — triaged, skip + +- **1000tools/1000 SaaS** — paid tiers have real user complaints (2026-05): paid-to-skip-queue submissions ghosted, no support, payment disputes. Free tier might be fine but proceed cautiously. +- **Boost Domain Rating** — "guaranteed DR improvement" framing is a link-scheme red flag. Skip. +- **InsightScout** — cold sales pitch selling their own monitoring SaaS to us, not a directory. Skip. +- **OutBid (SaaSHunt.best)** — pay-to-rank leaderboard scheme. Skip. +- **LinkSalad** (2026-09-07 email) — explicitly markets itself on "high-DR do-follow links" / "SEO friendly exposure" / "gain trusted domain ratings" and is a **paid** submission — same link-scheme red flag as Boost Domain Rating above (a real product directory sells discovery, not backlink authority as the pitch). Skip. +- **TinyHunt** (2026-09-07 email) — free, otherwise fine per the "Smol Hunt/etc." batch note above, but AJ's call (2026-09-07): skip both this and LinkSalad for now — account is still heads-down on the Reddit content-filter/karma-building situation, not adding any more external submissions/link exposure in the meantime. +- **jerrylam224 email** — unclear/unrelated content, not reviewed, AJ said skip. + +## Follow-up items + +- Reply drafted for Presendapp on dev.to (design-philosophy discussion thread) — AJ to post himself. +- Timothy Bramlett reply (status page question) — sent, closed. +- PH forum follow-up post — posted, not independently re-verified. +- RapidAPI Pro plan's "Requests" object quota still shows 500,000/month (same as Basic/free cap) instead of the intended 10,000 — optional fix, AJ's discretion. +- Open PR to check: none currently open — all recent badge PRs (LaunchNest, DevHub, KittyLaunch) merged into main.