Show HN: FP-pack – Functional pipelines in TypeScript without monads

Hacker News (score: 11)
Found: January 03, 2026
ID: 2886

Description

Code Quality
Show HN: FP-pack – Functional pipelines in TypeScript without monads Hi HN,

I built fp-pack, a small TypeScript functional utility library focused on pipe-first composition.

The goal is to keep pipelines simple and readable, while still supporting early exits and side effects — without introducing monads like Option or Either.

Most code uses plain pipe/pipeAsync. For the few cases that need early termination, fp-pack provides a SideEffect-based pipeline that short-circuits safely.

I also wrote an “AI agent skills” document to help LLMs generate consistent fp-pack-style code.

Feedback, criticism, or questions are very welcome.

More from Hacker

Bare metal programming with RISC-V guide (2023)

Bare metal programming with RISC-V guide (2023)

Fly's Sprites.dev addresses dev environment sandboxes and API sandboxes together

Fly's Sprites.dev addresses dev environment sandboxes and API sandboxes together

Show HN: HN Sentiment API – I ranked tech CEOs by how much you hate them

Show HN: HN Sentiment API – I ranked tech CEOs by how much you hate them I built an API that extracts entities from Hacker News comments and classifies sentiment towards them as positive, negative, or neutral. It also classifies overall comment sentiment and assigns each entity a label (person, location, date, technology, organization, other).<p>505k+ comments, Oct 31 - Present.<p>Here&#x27;s the leaderboard:<p>LOVED:<p>- Steve Jobs: 44% positive, 7% negative<p>- Linus Torvalds: 43% positive, 5% negative<p>- Gabe Newell: 34% positive, 8% negative<p>MID:<p>- Bill Gates: 22% positive, 8% negative<p>- Tim Cook: 15% positive, 30% negative<p>- Bezos: 12% positive, 18% negative<p>HATED:<p>- Zuckerberg: 4% positive, 35% negative<p>- Sam Altman: 8% positive, 38% negative<p>- Musk: 5% positive, 45% negative<p>Try it yourself:<p># Who does HN talk about the most?<p>curl &quot;<a href="https:&#x2F;&#x2F;api.hnpulse.com&#x2F;entities?label=person&amp;sort=mentions" rel="nofollow">https:&#x2F;&#x2F;api.hnpulse.com&#x2F;entities?label=person&amp;sort=mentions</a>&quot;<p># What are people saying about remote work?<p>curl &quot;<a href="https:&#x2F;&#x2F;api.hnpulse.com&#x2F;comments?entity=remote" rel="nofollow">https:&#x2F;&#x2F;api.hnpulse.com&#x2F;comments?entity=remote</a> work&amp;limit=3&quot;<p># Is OpenAI&#x27;s reputation getting worse?<p>curl &quot;<a href="https:&#x2F;&#x2F;api.hnpulse.com&#x2F;trends?entity=openai&amp;bucket=day" rel="nofollow">https:&#x2F;&#x2F;api.hnpulse.com&#x2F;trends?entity=openai&amp;bucket=day</a>&quot;<p># What technology gets mentioned alongside SF?<p>curl &quot;<a href="https:&#x2F;&#x2F;api.hnpulse.com&#x2F;entities?co-occur=SF&amp;label=technology&amp;sort=mentions" rel="nofollow">https:&#x2F;&#x2F;api.hnpulse.com&#x2F;entities?co-occur=SF&amp;label=technolog...</a>&quot;<p>Stack: Go, PostgreSQL, GPT-4o mini for entity extraction<p>Docs: <a href="https:&#x2F;&#x2F;docs.hnpulse.com" rel="nofollow">https:&#x2F;&#x2F;docs.hnpulse.com</a> API: <a href="https:&#x2F;&#x2F;api.hnpulse.com" rel="nofollow">https:&#x2F;&#x2F;api.hnpulse.com</a>

Show HN: I open-sourced my Go and Next B2B SaaS Starter (deploy anywhere, MIT)

Show HN: I open-sourced my Go and Next B2B SaaS Starter (deploy anywhere, MIT) Hi HN, I&#x27;m Mohammed, a technical founder who loves shipping and giving back to the community. I&#x27;m open-sourcing the full-stack engine that powers my B2B product, apflow.co.<p>What it is: A production B2B starter with a Go backend and Next.js frontend. Both are fully Dockerized with separate containers. No Vercel. No Supabase. Deploy the whole thing on a $6 VPS, or split frontend and backend across different providers. You own the infrastructure.<p>The problem I was solving:<p>Every SaaS starter I evaluated had the same issue: they locked me into someone else&#x27;s platform. Vercel for hosting. PlanetScale for the database. Serverless functions billing per invocation. Fine for prototypes, but costs become unpredictable at scale and migrating away is painful.<p>I wanted something I could deploy on any Linux box with docker-compose up. Something where I could host the frontend on Cloudflare Pages and the backend on a Hetzner VPS if I wanted. No vendor-specific APIs buried in my code.<p>Why Go for the backend:<p>Go gives me exactly what I need for a SaaS backend:<p>Tiny footprint. The backend idles at ~50MB RAM. On a cheap VPS, that headroom lets me run more services without upgrading. Concurrency without complexity. Billing webhooks, file uploads, and AI calls run concurrently without callback hell. Compile-time type safety. Using SQLC, my SQL compiles to type-safe Go. If the query is wrong, it fails at build time, not in production. Predictable performance. No garbage collection pauses that surprise you under load. The architecture (Modular Monolith):<p>I didn&#x27;t want microservices complexity for a small team, but I needed clean separation. I built a Modular Monolith: features like Auth, Billing, and AI are isolated Go modules with explicit interfaces, but they deploy as a single binary.<p>This structure also made AI coding tools (Cursor, Claude Code) dramatically more effective. Because every module has strict boundaries, the AI knows exactly where new code belongs and doesn&#x27;t break other modules.<p>Full-stack, not just backend:<p>Backend: Go 1.25 + Gin + SQLC (type-safe SQL, no ORM) + PostgreSQL with pgvector Frontend: Next.js 16 + React 19 + Tailwind + shadcn&#x2F;ui Communication: The frontend consumes a clean REST API. You can swap Next.js for any framework that speaks HTTP. Infrastructure: Separate Dockerfiles for frontend and backend. Deploy together or apart. What&#x27;s pre-built:<p>The boring infrastructure is solved so you can focus on your actual product:<p>Auth + RBAC: Stytch B2B integration with Organizations, Teams, and Roles. Multi-tenant data isolation enforced at the query level. Billing: Polar.sh as Merchant of Record. Handles subscriptions, invoices, and global tax&#x2F;VAT. No Stripe webhook edge cases. AI Pipeline: OpenAI RAG using pgvector. The retrieval service enforces strict context boundaries to minimize hallucinations. OCR: Mistral integration for document extraction. File Storage: Cloudflare R2 integration. Each feature is a separate module. Don&#x27;t need OCR? Remove it. Want Stripe instead of Polar? The billing interface is abstracted.<p>Real-world proof:<p>This isn&#x27;t a template I made for GitHub stars. It&#x27;s the exact code running apflow.co in production. When I added document OCR, I built it as a new module without touching Auth or Billing. The architecture held.<p>How to try it:<p>Clone the repo, read setup.md to check the prerequisite, run .&#x2F;setup.sh, and you have a working B2B environment locally in minutes.<p>Feedback I want:<p>I&#x27;d appreciate feedback from Go developers on the module boundaries and cross-module interfaces. Also curious if anyone has suggestions for the Docker setup in production deployments.<p>GitHub: <a href="https:&#x2F;&#x2F;github.com&#x2F;moasq&#x2F;production-saas-starter" rel="nofollow">https:&#x2F;&#x2F;github.com&#x2F;moasq&#x2F;production-saas-starter</a><p>Live: <a href="https:&#x2F;&#x2F;apflow.co" rel="nofollow">https:&#x2F;&#x2F;apflow.co</a>

No other tools from this source yet.