Piyush Kashyap

Full Stack Developer

I work primarily with founders and small teams who need software built quickly without creating long-term technical problems.

Many projects start before there is a complete specification. Sometimes there is only a rough idea, a spreadsheet, a collection of screenshots, or an existing manual workflow that has become difficult to manage.

My role is to take that initial concept, identify the core requirements, design a practical architecture, and build a version that can be used and tested by real users.

AI SaaSAI AgentsAutomationStartup MVPs
PK

Your photo here

About

I started building software because I was curious about how things work. That curiosity turned into a career. Over the past few years, I have worked on a range of projects — from internal tools for small businesses to multi-tenant SaaS platforms used by hundreds of users.

Most of the work I do involves taking an idea that exists as a rough concept — sometimes a spreadsheet, sometimes a series of conversations, sometimes just a problem someone describes over a call — and turning it into software that people can actually use. That process involves understanding the problem deeply before writing any code, designing an architecture that makes sense for the specific constraints of the project, and then building it in a way that is maintainable over time.

I work primarily with founders and small teams. These are people who have a clear understanding of the problem they are trying to solve but need someone who can handle the technical side. They usually have tight timelines and limited budgets, which means the work needs to be practical rather than over-engineered.

I enjoy projects where the technical challenge is matched by a real business need. The most interesting work happens when you are not just building features but solving operational problems — automating a workflow that currently takes hours, connecting systems that do not talk to each other, or creating a dashboard that gives a team visibility into something they have been tracking manually.

I work independently through Upwork. There is no agency layer, no account manager, and no outsourced development. When you hire me, you are working directly with the person writing the code. That means faster communication, fewer misunderstandings, and a relationship built on direct trust.

My technical stack centers on Next.js, TypeScript, Supabase, and PostgreSQL for most projects. For automation work, I use n8n and custom API integrations. For AI features, I work with OpenAI and Anthropic APIs. But the stack is always chosen based on what the project actually needs, not based on what is popular at the moment.

What I Work On

The type of software varies, but the problems are usually similar.

Products That Help Businesses Operate More Efficiently

I work on products that help businesses operate more efficiently, reduce manual work, improve communication with customers, or create new revenue opportunities. The software itself varies from project to project — subscription platforms, internal tools, customer portals, dashboards — but the objective is usually the same: solve a practical problem with a system that is reliable and maintainable.

Automation Systems That Remove Repetitive Work

Many businesses have workflows that are manual, time-consuming, and error-prone. I build automation systems that handle these tasks — lead qualification, data processing, customer follow-up, CRM synchronization. The goal is not to replace human judgment but to remove the parts of the work that do not require it. These systems run continuously and can be managed through a simple dashboard.

Working Prototypes for Founders Who Need to Validate Ideas

Starting a new product is risky. You do not know if the idea will work until you put it in front of users. I help founders move from concept to working prototype quickly — not by cutting corners on architecture, but by focusing on the core functionality that matters for validation. The first version does not need every feature. It needs to solve the core problem well enough to get feedback.

Selected Projects

A few projects that show how I approach problems and make technical decisions.

RecallSync

Agentic CRM automation layer for GoHighLevel

Background

The client ran a CRM-heavy operation using GoHighLevel. GoHighLevel is a powerful platform, but it has rigid automation rules. The client needed custom logic that went beyond what GoHighLevel's native workflow builder could handle — things like dynamic lead scoring based on conversation context, conditional routing that adapted in real time, and multi-step automations that responded to signals from external systems.

Challenge

The core challenge was building a layer of custom intelligence on top of an existing platform without breaking the things that already worked. GoHighLevel handles the CRM, the messaging, and the basic workflows. The client needed something that could sit on top of that and make decisions — something that could understand context, adapt to different scenarios, and act without constant human oversight.

Constraints

The system needed to be multi-tenant because the client managed multiple accounts. It had to process data in real time because delays in lead routing directly impact conversion. And it needed to be cost-effective — running a large language model for every interaction would have been prohibitively expensive.

Approach

I built an agentic layer using LangGraph for orchestration and local inference through Ollama for the parts of the system that did not need the full power of a large model. The architecture separates the decision-making logic from the CRM integration, which means the system can be extended to work with other platforms beyond GoHighLevel if needed. The multi-tenant design uses row-level security in Supabase to keep account data isolated.

Technical Decisions

The main technical decision was which parts of the system should use a large language model and which parts should use simpler rule-based logic. Not every decision needs AI. Some automations are straightforward — if a lead meets criteria X, route them to team Y. But other decisions require understanding nuance in conversation text, and that is where the language model adds value. The system uses a hybrid approach: fast rules for simple cases, AI for complex ones.

Outcome

The client now has a system that handles CRM automation at a level that was not possible with GoHighLevel alone. Clients using the platform can automate complex workflows without writing custom code. The multi-tenant architecture means the system scales as the client adds more accounts.

Lessons Learned

The biggest lesson was about cost management. Running AI models for every interaction does not scale. The hybrid approach — using AI only where it adds real value — is more practical and more sustainable.

Node.jsLangGraphOllamaGoHighLevel APISupabase

FusionSyncAI

Instagram DM automation for nightlife and real estate

Background

The client operated in the Chandigarh nightlife and real estate market. Both industries rely heavily on Instagram for lead generation. Businesses post content, people respond in DMs, and someone on the team follows up manually. The problem is that manual follow-up is slow, inconsistent, and does not scale. By the time someone responds to a DM, the lead has often moved on.

Challenge

Instagram does not offer a public API for sending DMs at scale. The automation had to work within Instagram's constraints while still being effective. The system needed to handle initial outreach, follow-up sequences, and qualification — all while looking like a real person was behind the conversation.

Constraints

Instagram's rate limits and detection systems meant the automation could not behave like a bot. Messages needed to feel natural. The timing needed to be realistic. The content needed to be contextual. And the system needed to handle the fact that Instagram changes its rules frequently.

Approach

I built a system that started with manual outreach patterns and gradually templated them. The initial version used real people sending targeted messages based on defined criteria. As the patterns became clear, I automated the sequencing while keeping the content flexible. The system integrates directly with Instagram's interface and uses n8n for workflow orchestration. Supabase tracks conversation state and lead information.

Technical Decisions

The decision to start manual and template gradually was deliberate. Automating Instagram DMs from day one would have been risky — the system needed to learn what actually works before scaling. The n8n workflows handle the sequencing, and Supabase stores the conversation data, which means the system can be extended to other platforms without rebuilding the core logic.

Outcome

The system was deployed across multiple nightlife venues and real estate agents in Chandigarh. Each business got consistent lead capture without adding headcount. The follow-up sequences run automatically, and the team can monitor everything through a dashboard.

Lessons Learned

The most important lesson was that automation works best when it augments human behavior rather than replacing it entirely. The system works because it was designed around how people actually communicate, not around how a robot would communicate.

Instagram APINode.jsn8nSupabaseClaude

IGThreadly

Instagram comment-to-DM automation SaaS

Background

Instagram comments are one of the highest-intent signals on the platform. When someone comments on your post, they are expressing interest. But most businesses never follow up on comments. The leads sit there, unanswered, while the business spends money on ads to generate new leads. The opportunity cost is significant.

Challenge

The client wanted a product that could detect new comments on Instagram posts and automatically send a direct message to the person who commented. The system needed to work across multiple Instagram accounts, handle different conversation flows based on the post content, and be simple enough that non-technical users could set it up without writing code.

Constraints

Instagram's API limitations meant the system needed to be careful about rate limits. The product needed a free tier to attract users, which meant the architecture had to be cost-effective at scale. And the conversation flows needed to be flexible enough to handle different use cases — real estate, e-commerce, coaching, local businesses.

Approach

I built a SaaS product using Next.js and Supabase. The core loop is straightforward: detect new comments via Instagram's webhook, match the comment to a post, look up the conversation flow configured for that post, and send a DM. The conversation flows are defined using JSON, which means users can create and modify them without writing code. Prisma handles the database schema, and the whole system is deployed on Vercel.

Technical Decisions

The JSON-based conversation flow system was a key decision. It allows non-technical users to define complex multi-step conversations while keeping the underlying system simple. Each flow is a JSON document that specifies the messages, the triggers, and the conditions. The system interprets this at runtime, which means changes take effect immediately without redeployment.

Outcome

The product launched with a free tier and is currently being used by businesses to capture leads from their Instagram comment sections. Users set up their conversation flows, connect their Instagram account, and the system handles the rest. The feedback has been positive — businesses are converting commenters into leads at a rate they were not achieving with manual follow-up.

Lessons Learned

Building a SaaS product is different from building a custom solution for a single client. With a SaaS product, you need to think about onboarding, pricing, scaling, and support from day one. The hardest part was not the technical implementation — it was making the product simple enough that users could set it up without help.

Next.jsTypeScriptSupabaseInstagram APIPrisma

Why Clients Choose to Work With Me

These are the things clients typically mention after working together.

Direct Communication

You work directly with the person writing the code. There is no project manager filtering messages, no account manager translating requirements, and no delay between asking a question and getting an answer. When you message me, you are talking to the person who understands both the business context and the technical implementation. That usually means faster decisions and fewer misunderstandings.

Practical Problem Solving

I focus on solving the problem at hand rather than building the most technically impressive solution. That means choosing the simplest architecture that works, using tools that are appropriate for the scale of the project, and avoiding unnecessary complexity. Over-engineering is a real problem in software projects — it slows development, increases maintenance costs, and makes future changes harder. I try to avoid that.

Transparent Progress

I work in short cycles and share working code regularly. You do not have to wait two months to see something. Within the first week, you will have a working version of the core functionality. That makes it easier to give feedback, catch misunderstandings early, and adjust the direction if needed. I also document technical decisions as I make them, so you understand why things are built the way they are.

Long-Term Maintainability

The code I write is meant to be maintained. That means clear naming, logical structure, and documentation where it matters. If you decide to bring another developer on later, they should be able to understand the codebase without needing me to explain everything. If you want to add features six months from now, the architecture should support that without requiring a rewrite.

Working Together

Here is what actually happens when we work together.

01

Project Discussion

Most projects begin with a conversation about the existing workflow, current bottlenecks, and desired outcome. I ask questions about how things work today, what has been tried before, and what success looks like. This is not a formal discovery process — it is a conversation that helps both of us understand whether this is a good fit and what the real problem is.

02

Architecture Planning

Before development begins, I spend time understanding how information should move through the system and what the long-term maintenance requirements will be. This includes database design, API structure, authentication approach, and integration points. I share a written plan before writing any code. We agree on scope, milestones, and pricing through Upwork.

03

Development

Features are implemented incrementally with regular review points. You see working code every few days, not after weeks of silent development. Communication happens through Upwork messages or Slack, depending on your preference. If something needs to change direction, we discuss it early rather than discovering problems at the end.

04

Testing and Refinement

The goal is not simply to verify that a feature works but to identify edge cases and operational risks before launch. I test with realistic data, check error handling, and verify that the system behaves correctly under conditions that are not perfect. This is also when we refine the user experience based on how the software actually works in practice.

05

Launch

Deployment is straightforward. Code goes live, you have documentation for how things work, and you know who to contact if something comes up. I do not disappear after launch. If there are issues in the first few weeks, I address them.

06

Ongoing Support

Most projects need some level of support after launch — bug fixes, small feature additions, adjustments based on user feedback. I remain available for that work. The relationship does not end when the initial project is deployed.

Let's Talk About Your Project

If you have a project in mind, a workflow that needs automating, or a problem that needs a technical solution, I would be happy to discuss it.

The best way to start is through Upwork. That gives us a clear scope, protected payments, and a structured way to work together. If you prefer to start with a conversation first, you can message me there as well.