# Ritesh KC > Hire the best full-stack React developer and UI/UX designer in Nepal. I build lightning-fast, scalable web applications and enterprise platforms. Ritesh KC is a full-stack engineer based in Kathmandu, Nepal, working US and Europe hours overlap. Frontend-heavy (React, Next.js, TypeScript), owns the backend (Node, NestJS, PostgreSQL), and ships LLM features (retrieval-augmented generation, document extraction) to production. Available for remote work. Every page on this site has a markdown twin: append `.md` to any URL, or send `Accept: text/markdown`. The links below point at those. `https://riteshkc.com.np/llms-full.txt` is this index with every document inlined. ## Start here - [Home](https://riteshkc.com.np/index.md): the claim, the numbers behind it, and the FAQ - [About](https://riteshkc.com.np/about.md): how I work, where I have worked, what I reach for - [Résumé](https://riteshkc.com.np/resume.md): experience, projects, skills, education, languages - [Contact](https://riteshkc.com.np/contact.md): book a 30-minute call; email, GitHub, LinkedIn, Discord ## Services - [Product interfaces](https://riteshkc.com.np/services/product-interfaces.md): Next.js and React developer for dashboards, admin panels and internal tools. The screens your customers and your team use all day. React, Next.js and TypeScript, built so the fortieth click is as fast as the first. - [The system under it](https://riteshkc.com.np/services/multi-tenant-systems.md): Multi-tenant SaaS developer: scheduling, bookings, payments and roles. The half of your product nobody sees until it breaks. NestJS and PostgreSQL, where the database enforces the rules instead of trusting your code to remember them. - [AI that cites its sources](https://riteshkc.com.np/services/rag-and-document-ai.md): RAG developer: AI search and extraction over your own documents. AI that answers from your documents instead of guessing. Every answer shows the document it came from, and "I could not find that" is a real answer with its own path through the code. ## Work - [Noveon](https://riteshkc.com.np/work/noveon.md): Next.js and Strapi website for a Hong Kong investment firm (2026, Full-stack developer). A website for a Hong Kong investment firm, built so people who are not developers can run it. Next.js on the front, Strapi on the firm's own server behind it. - [Marti China](https://riteshkc.com.np/work/marti-china.md): Bilingual corporate site and 49-page product catalogue on Next.js and Strapi (2026, Full-stack developer). A corporate site for the China arm of a Swiss tunnelling supplier. Next.js on the front, self-hosted Strapi behind it: 49 product pages, 17 project references, two languages. - [Gradsy](https://riteshkc.com.np/work/gradsy.md): Turning a Manual Workflow into a Scalable Product (2026, Full-stack engineer). A centralized platform for students, counselors, and admins with role-based access - built with Next.js and NestJS, and deployed on AWS using S3, SES, and Lightsail. - [Yacht Cloud](https://riteshkc.com.np/work/yacht-cloud.md): YachtCloud: Engineering a Multitenant Platform for Luxury Charters (2024, Frontend Developer). Engineered a multitenant frontend and RAG AI planner that powers YachtCloud and multiple white-labeled broker platforms by instantly filtering massive luxury yacht inventories. - [Investment Banker/Analyst Portfolio](https://riteshkc.com.np/work/prajesh-sagar.md): Next.js and Payload CMS portfolio website for a NEPSE portfolio manager (2026, Designer and developer). A portfolio site for a Kathmandu investment banker who manages private portfolios on the Nepal Stock Exchange. Next.js with Payload inside the same app, and a hero that drifts like a chart. ## Case studies - [One page, one ask, and a hero made out of banknotes](https://riteshkc.com.np/case-studies/prajesh-sagar.md): A month on a one-page site for a NEPSE portfolio manager. The order of the page, how the hero animation is built in CSS, and what the form asks before it asks for a call. - [Who edits it after I leave, and which map loads in China](https://riteshkc.com.np/case-studies/marti-china.md): Two months on a corporate site and product catalogue for the China arm of a Swiss tunnelling supplier. The decisions that mattered were the CMS, the catalogue template and the map provider. - [Six investor pages, two templates, and no developer on retainer](https://riteshkc.com.np/case-studies/noveon.md): Three months on a website for a Hong Kong investment firm. Why the CMS runs on the client's own server, how six investor pages come from two templates, and what is left before it launches. - [What the student sees, what the office sees, from one set of records](https://riteshkc.com.np/case-studies/gradsy.md): A consultancy ran applications in spreadsheets and email. The platform gives a student one honest view of their own file, and gives the office one queue built from the same records. - [The yacht page, the fleet search, and the pages Google sees](https://riteshkc.com.np/case-studies/yacht-cloud.md): Seven months on Yacht Cloud as one of the frontend developers. Three surfaces needed work: the yacht page, the fleet search over 263 yachts, and the landing pages. Here is what each was missing. ## Writing - [How to Get a Claude Pro Free Trial in October 2026](https://riteshkc.com.np/blog/claude-pro-guest-pass.md): 2026-09-04. Anthropic removed the public trial button, but you can still get 7 days of Claude Pro for free. Click here to use an active referral pass. - [A status machine belongs in a table](https://riteshkc.com.np/blog/a-status-machine-belongs-in-a-table.md): 2026-08-05. Nine statuses, two sets of allowed transitions, and two names for every state. Moving all of that into rows instead of an if chain got engineering out of the workflow business. - [Endpoints that refuse to be oracles](https://riteshkc.com.np/blog/endpoints-that-refuse-to-be-oracles.md): 2026-08-05. A 404 on unsubscribe tells an attacker which tokens are real. A 409 on subscribe tells them who is on your list. Honest status codes leak, and the fix reads like a bug. - [Every reset link returned 400](https://riteshkc.com.np/blog/every-reset-link-returned-400.md): 2026-08-05. The reset endpoint was fine. The token was fine. The email was fine. The bug was one path in a captcha config, and the word doing the damage was "includes". - [Ready to submit is not a boolean](https://riteshkc.com.np/blog/ready-to-submit-is-not-a-boolean.md): 2026-08-05. A submit gate that looked like one rule and needed three, plus an error message that names which of four things the student actually has to fix. - [Six socket events, and not one refetch](https://riteshkc.com.np/blog/six-socket-events-and-not-one-refetch.md): 2026-08-05. Realtime usually arrives as a second copy of your state. Treating every socket event as a write into the query cache instead of a signal to refetch keeps it to one. - [A trust score you can rebuild from the log](https://riteshkc.com.np/blog/a-score-you-can-rebuild-from-the-log.md): 2026-07-29. Ten lines that replay a moderation history into a score, and why clamping inside the fold instead of after it is the difference between working and quietly drifting. - [Cache invalidation when the cache is in another repo](https://riteshkc.com.np/blog/cache-invalidation-in-another-repo.md): 2026-07-29. An admin edits a university and the public page keeps the old number for a day. The backend now calls the frontend, over tag names nothing checks. - [Overbooking is a database problem](https://riteshkc.com.np/blog/overbooking-is-a-database-problem.md): 2026-07-29. Counting rows before you insert one is not a capacity check. Here is how a unique index, a constraint violation, and a NULL ended up doing the work instead. - [Rate limiting a provider without a rate limiter](https://riteshkc.com.np/blog/rate-limiting-by-queue-shape.md): 2026-07-29. SES caps sends per second. The fix was worker concurrency of one and a sleep, plus an honest note in the code about the case where it stops working. - [The fast moderation layer does less on purpose](https://riteshkc.com.np/blog/the-fast-moderation-layer-does-less.md): 2026-07-29. A synchronous gate on five routes that blocks almost nothing, and an async worker that decides everything else. Splitting them by latency was the wrong axis. - [In RAG, recall is the number that matters](https://riteshkc.com.np/blog/recall-beats-precision.md): 2025-06-01. Why the failure mode that sinks a retrieval system is the right document never showing up, and why that makes recall, not prompt tuning, the thing to optimize. ## Other languages - [Deutsch](https://riteshkc.com.np/de.md): the same site in Deutsch ## Optional - [Services index](https://riteshkc.com.np/services.md): the three layers, one page - [Work index](https://riteshkc.com.np/work.md): all projects with facts, one page - [Case study index](https://riteshkc.com.np/case-studies.md): all studies, one page - [Blog index](https://riteshkc.com.np/blog.md): all posts, one page - [RSS](https://riteshkc.com.np/rss.xml): the writing feed - [Sitemap](https://riteshkc.com.np/sitemap.xml): every canonical URL