Rewriteme - AI Powered Text Rewriter App by Michael Wen
I wrote an app to rewrite a given text
here using Groq API, all by myself. You can paste one or multiple paragraphs, choose a tone or length, and get
a clean rewrite in seconds. Here's the web UI:
What Makes This Tool Special
-
Dynamic Model Selection: I realized early on that
hard-coding a model wasn’t sustainable — models get decommissioned and
I didn’t want the app to break. Now, the backend checks which models
are available at startup and picks the best one automatically. It
feels great knowing the service just works without me having to babysit it.
-
Customizable Rewriting: I wanted users to have control,
so you can select the tone (casual, serious, neutral) and the output
length (shorter, same, longer). This makes it feel more like a
personal assistant than a black box.
-
Rolling Status Feedback: When I first tested it,
users didn’t know what was happening while waiting for the rewrite.
So I added a rolling status line in the frontend that shows every step:
sending text, rewriting in progress, finished, or error messages. I
think it makes the experience way more transparent and friendly.
-
Lightweight & VPS-Friendly: I wanted it to run even
on my low-resource VPS. By offloading the rewriting to Groq’s API,
the backend stays light, so I don’t have to worry about memory or CPU spikes.
-
Professional UI: I spent time choosing colors, spacing,
and responsive layout so the interface feels intentional, clean, and
modern. No flashy gimmicks — just a tool that’s pleasant to use.
-
Reliable & Secure: HTTPS, Docker, Nginx, environment
variables for API keys — I set it up to be maintainable and stable,
even if I step away from the project for a while.
How I Built This
I want to give you a peek behind the curtain, so you can see how all
the pieces come together.
Behind the scenes, it’s a mix of a React frontend with Vite, a Dockerized
FastAPI backend, and Nginx serving everything securely over HTTPS.
I tried to make it all work together smoothly, and I hope the experience
feels as seamless as possible.
-
Frontend: I built the UI with React and Vite. My goal
was to make it look professional and clean, and to work well on both
desktop and mobile. I spent some time tweaking spacing, colors, and
the rolling status line so that users always know what’s happening.
-
Backend: Originally, I hard-coded a specific model for
rewriting text, but then it got decommissioned. So I thought it would
be nicer to fetch the list of available Groq models dynamically, and
only do it once at startup. That way, the backend automatically picks
the best model and keeps working even if older models disappear.
-
Reverse Proxy: I set up Nginx to serve the frontend,
forward API requests to FastAPI, and handle HTTPS. This took a few
tries to get the config just right, especially with body size limits
and WebSocket support for other parts of my project.
The workflow is simple from the user perspective: you submit text, the
frontend talks to the backend, the backend selects a model and rewrites
your text, and then you see it instantly — all while keeping the
interface responsive and informative.
The Hurdles I Overcame
I want to be honest — building this wasn’t without challenges, and I
learned a lot along the way:
-
Model Deprecations: At first, I hard-coded a model,
but Groq eventually decommissioned it. That broke my service, and I
realized I needed something smarter. So I made the backend fetch the
available models at startup and pick the best one — problem solved!
-
UX Transparency: My first users didn’t know what
was happening while waiting for the rewrite. It felt frustrating even
to me while testing, so I added a rolling status line in the frontend
to keep everyone informed in real-time.
-
Limited VPS Resources: I wanted this to run on a
small VPS without massive CPU usage. I realized I could delegate
the heavy lifting to Groq’s API. That way, my backend stays light
and fast.
-
Professional UI: Making it look polished and mobile
friendly took some time. I had to adjust spacing, colors, cards, and
typography, but I’m really happy with the clean, modern look now.
-
Docker & Deployment: I already had a Dockerized ML
backend. Integrating the new rewrite endpoint without breaking
anything was tricky, but splitting the API into a router and using
environment variables made it clean and maintainable.
Every challenge taught me something, and now the app is much more robust,
friendly, and enjoyable for users — and for me when I’m maintaining it!
That’s a bit of the story behind this text rewriter. I built it to be
simple, reliable, and friendly to use. It’s all containerized with
Docker, served securely with Nginx, and uses Groq’s API to do the
heavy lifting.
I tried to think about the user experience every step of the way — from
the rolling status line to the responsive, clean UI. It’s also light
enough to run on a small VPS, which is something I wanted for
personal projects and demos.
I hope you enjoy using it as much as I enjoyed building it. And I’m
planning to keep improving it — better streaming, multiple LLM providers,
more options, and all sorts of small quality-of-life improvements.
2026 — Built, maintained, and polished by Michael Wen.
Any comments? Feel free to participate below in the Facebook comment section.