Prajwal Tomar Profile picture
Aug 13 12 tweets 4 min read Read on X
How I designed and built a PWA using AI

The client wanted a mobile app, but I recommended a PWA for faster development and lower costs.

Here’s how I designed, built, and launched it using AI ↓ Image
1/ Planning the Idea With AI

Every project starts with a clear understanding of the problem, solution, and audience.

I used @ChatGPTapp to turn the client’s rough idea into a structured brief.

Prompt:
“I’m starting a team productivity tracker for remote teams. It should help managers track work hours, task completion, and team efficiency. Convert this into a concise project brief.”

ChatGPT structured it into:
- Problem: Teams struggle to track and improve their daily work
- Solution: A web-based productivity tracker with AI-generated insights
- Target Users: Remote teams handling multiple projects

Having a well-defined brief saved time and avoided confusion later.
2/ Why PWA Instead of Native Apps

Instead of building native apps, I went with a PWA because it works on desktop and mobile with one codebase.

- Users can install it like an app without needing an app store
- It is cheaper and faster to build
- Updates happen instantly without app store delays
- AI today is better suited for building PWAs than native apps

For startups testing an idea, a PWA is the best option.
3/ Generating Features With AI

Next, I used AI to generate and refine the app’s features.

Prompt:
“Based on this project brief, list the must-have features for a productivity tracker PWA. Give real-world examples if possible.”

AI suggested:

- Task logging with priority levels
- AI-powered daily reports on productivity
- Shared dashboards for team collaboration
- Offline access for seamless task tracking

After refining the list, I had a clear development roadmap.
4/ Structuring the Site Map

With features set, I asked ChatGPT to map out the app’s page structure and navigation flow.

Prompt:
“Provide a structured site map for this productivity tracker, including primary pages, their hierarchy, and how they connect.”

The result:
- Home: Overview of team progress
- Dashboard: Work hours, tasks, AI insights
- Task Management: Add, update, and categorize tasks
- Team Collaboration: View shared progress

A clear structure avoided confusion when building the UI.
5/ Designing the UI Layout

Before opening UX Pilot, I asked ChatGPT to describe the homepage layout in plain text.

Prompt:
“Describe the structure for the homepage, from top to bottom, including layout and content blocks.”

It suggested:

- Navigation bar with logo and quick links
- Hero section showing today’s productivity summary
- Task overview with completion progress
- AI-powered insights on team efficiency

Now repeat this step for each page in the sitemap and generate a detailed description. The more detailed, the better.
6/ Designing the UI With UX Pilot

Usually, I skip UI design and go straight to Lovable, but this time the client needed high-fidelity UI screens. So, I used UX Pilot to generate them efficiently.

- used AI prompts to set the style and layout, ensuring a minimal and clean design
- inputted textual descriptions of each screen one by one, including the dashboard, task manager, and team collaboration pages
- UX Pilot generated polished designs purely based on these descriptions
- experimented with multiple fonts using a single click to find the best fit
- I was happy with the results, but if needed, the designs could be exported to Figma for manual refinements

At the end of this process, all high-fidelity UI screens for the PWA were created, and the client was happy with the outcome.
7/ Building the App Using UX Pilot and @lovable_dev

With the high-fidelity UI screens ready, I took full advantage of UX Pilot’s built-in code generation.

- copied the generated code directly from UX Pilot for each screen
- pasted the project brief along with this code into Lovable
- uploaded screenshots of the high-fidelity UI designs for reference
- went through each screen one by one and converted them into a functional PWA in Lovable
- repeated this process for all UI screens, ensuring everything matched the original design

By following this approach, I rapidly transformed the high-fidelity UI into a working PWA without writing even a single line of code.
8/ Setting Up the Backend With @supabase

For the backend, I used Supabase, and setting it up was straightforward.

Lovable makes it really easy to integrate Supabase, so I had authentication, the admin panel, and other backend features running in no time.

With Lovable’s seamless integration, Supabase handled all backend operations efficiently. Within a short time, the backend was fully functional, allowing me to focus on refining the user experience.
9/ Taking the PWA Into Cursor for Advanced Features (Optional)

If needed, you can take this PWA into Cursor to add more advanced backend features and optimize the code further.

- You can use it to enhance database queries, improve API efficiency, and add custom functionalities
- For this PWA, these extra backend features were not necessary, so I did not use Cursor

The combination of Lovable and Supabase was enough to meet all the client’s requirements efficiently.
10/ Deploying and Hosting the App

Once the app was built, I hosted it on Lovable and shared the Lovable URL with the client for review. This made it easy for them to test the PWA before final deployment.

After approval, I connected a custom domain using Netlify and added a PWA manifest. This allowed users to install the app on their mobile devices just like a native app.

Finally, I ran final tests to ensure everything worked smoothly.
Note: The PWA in this thread is just an example, not a real-world MVP. I can’t share the actual one due to NDA, but you can follow the exact same steps to design and build yours.

• • •

Missing some Tweet in this thread? You can try to force a refresh
 

Keep Current with Prajwal Tomar

Prajwal Tomar Profile picture

Stay in touch and get notified when new unrolls are available from this author!

Read all threads

This Thread may be Removed Anytime!

PDF

Twitter may remove this content at anytime! Save it as PDF for later use!

Try unrolling a thread yourself!

how to unroll video
  1. Follow @ThreadReaderApp to mention us!

  2. From a Twitter thread mention us with a keyword "unroll"
@threadreaderapp unroll

Practice here first or read more on our help page!

More from @PrajwalTomar_

Aug 11
I can’t stop building beautiful hero sections inside @lovable_dev
This one turned out insane.

Credits: @DannPetty
Full breakdown below ↓
1/ Start with visual inspiration

I found this layout from Dann Petty’s portfolio and instantly knew I wanted to rebuild it.

Great structure. Clean font. Strong first impression.

2/ Generate the image with AI

I used Leonardo AI to create a stunning visual for the background.

MidJourney works too, but I’ve been experimenting with Leonardo lately.

Prompt:
"A cinematic, high-resolution side-view shot of a modern electric SUV driving along a coastal highway with the ocean in the background. The car is silver with a black roof and sporty tires, and it has a long surfboard mounted on the roof rack. The background includes a clear blue sky, calm sea waves, sandy cliffs, and soft sunlight creating a warm, late afternoon glow. The road is clean and curves slightly along the coastline. Style should be photo-realistic, suitable for use in a sleek automotive website hero section. Include a subtle motion blur to imply movement. Aspect ratio: 16:9. Ensure there is space in the sky area for overlaying text and navigation items.

Optional parameters (if your AI image tool supports them):

Style: Photorealistic, commercial-grade

Lighting: Golden hour, soft natural light

Aspect Ratio: 16:9

Resolution: 1920x1080 or higher"Image
Read 8 tweets
Jul 29
If you’re still copy-pasting Shadcn components manually, you’re wasting 80% of your dev time.

I’ve built 20+ MVPs and learned this the hard way.

Here’s the workflow that changed everything 👇
Most devs do this:

→ Ask ChatGPT to build UI
→ Get broken components
→ Debug CSS for 2 hrs
→ Copy-paste Shadcn docs
→ Fix styling
→ Repeat forever

Sound familiar?
The problem isn’t your prompts.

Your AI just has no context about Shadcn.

It’s like asking someone to cook without telling them what’s in the kitchen.
Read 10 tweets
Jul 28
1 year ago, I was a full-time dev trying to make an extra $1K/month.

Today:
→ I run an AI MVP agency
→ A paid community for AI-first devs
→ Launching my first SaaS soon
→ All bringing in ~$30K/month total

Didn’t plan this.
Just kept building in public.

Here’s the story 👇 Image
1/ Started with small goals

Back in Sep 2024, I was just posting what I was learning and building.
Hackathons, AI experiments, random ideas.

Didn’t care about likes.
I just wanted to build, share, and maybe make $1K extra alongside my full-time job.
2/ First break came from a project

I was building QuizNote in public for fun.
Then someone DMed me: “Can you build this for us?”

I said YES.
Closed my first $1K client using just a PRD I had written.
That moment changed everything.
Read 11 tweets
Jul 27
Want to steal the UI/UX of top companies and use it in your own app? (Legally?)

Here’s my exact Mobbin + Figma system to do it ↓ Image
1/ You don’t need to invent design

You just need to reuse what already works.

Products like Uber, Bolt, and Notion have spent millions perfecting their UX.

Your job is to study their flow and use AI to recreate it.
2/ Step 1: Mobbin → Find the gold

Go to

Search by keyword: ride, cab, fintech, crm

Pick real apps from real companies.

You’re not guessing. You’re following proven UX patterns.mobbin.design
Read 13 tweets
Jul 24
I’ve vibe coded 18+ MVPs for clients using Cursor.

Security was the one lesson I learned the hard way.

Here’s the checklist I wish I had from day one ↓
1. Rate limit your endpoints

If you skip this, bots or bad actors can hit your backend 100s of times per second.

This can:
• Crash your database
• Drain your Supabase usage
• Spike costs or open you to attacks

Tools to use:
• Supabase Edge Functions with a rate limiter
• Vercel Middleware
• Basic IP throttling with Next.js middleware
2. Enable Row-Level Security (RLS)

If you’re using Supabase, turn on RLS on every table from day one.

Without it, users can query other people’s data.
And yes, this happens way more than you’d think.

To set it up:
• Go to Table → RLS → Enable
• Use policies like user_id = auth.uid()

No RLS = no data security.

Pro Tip: Try asking Cursor for these policies based on your DB design and PRD. It will help you write them correctly.
Read 13 tweets
Jul 23
Want to 10x your Cursor or Claude Code workflow?

Stop prompting like a developer.
Start thinking like a product manager.

Here’s how ↓
1. AI tools are developers, not product managers

Cursor, Windsurf, Lovable, they’re great at execution.

But they can’t make product decisions for you.

If your prompt lacks clarity or structure, the output will suck. Every single time.
2. Think like a product manager

AI is your dev team.

You don’t say “build the app” and walk away. You need to:

– Break tasks down
– Define must-have features
– Guide the user flow

That’s PM 101.
Read 11 tweets

Did Thread Reader help you today?

Support us! We are indie developers!


This site is made by just two indie developers on a laptop doing marketing, support and development! Read more about the story.

Become a Premium Member ($3/month or $30/year) and get exclusive features!

Become Premium

Don't want to be a Premium member but still want to support us?

Make a small donation by buying us coffee ($5) or help with server cost ($10)

Donate via Paypal

Or Donate anonymously using crypto!

Ethereum

0xfe58350B80634f60Fa6Dc149a72b4DFbc17D341E copy

Bitcoin

3ATGMxNzCUFzxpMCHL5sWSt4DVtS8UqXpi copy

Thank you for your support!

Follow Us!

:(