# howtoprofessionallysay is a Next.js content site whose author asks you not to use it verbatim

> The repository behind How to Professionally Say is a small static site built on Next.js, TailwindCSS and Cloudflare Pages, holding a phrase list collected from a social media creator. The README spends as much space warning readers about the tone of the content as it does describing the software.

**AkashRajpurohit/howtoprofessionallysay** — 📖 A guide for your daily "professional" interactions

- Repository: https://github.com/AkashRajpurohit/howtoprofessionallysay
- Website: https://howtoprofessionallysay.akashrajpurohit.com/
- Stars: 1,280 · Forks: 50
- Language: TypeScript
- License: MIT
- Published: 2026-10-17 · Updated: 2026-10-17 · Language: en
- Canonical page: https://hysenlabs.com/projects/akashrajpurohit-howtoprofessionallysay

## The project is a phrase list, and the source is an Instagram account

The software is the least interesting part of this repository, and the README is honest about that. It describes a simple static website for common phrases we might want to say to colleagues but want to make it sound more professional.

What makes it worth writing about is the provenance. The data is collected from content created by @loewhaley on Instagram, and the credits appear throughout the site. The repository layout backs up the claim that the content is data rather than hardcoded pages: there is a content/ directory alongside components/, hooks/, lib/, store/, pages/, styles/ and public/, which is the standard shape for a Next.js site whose entries come from a structured collection rather than from a page per item.

That distinction matters for anyone evaluating it. If you want the phrase list, the site is the artefact. If you want to understand how a small content site is put together, the repository is a readable example. If you want a library, neither applies.

The author also documents the project's origin on his own blog, linking a write-up about the journey into the project, and the site is listed on Product Hunt with the description A guide for your daily professional interactions. Both are context for how the project positions itself, not technical documentation.

## The disclaimer is the most substantive documentation in the file

Most of the README's length is a section headed Disclaimer, and it is worth reading closely because it changes what the project is.

The author first addresses people arriving from a Hacker News thread and a Reddit post, thanking them for feedback. He then states the intent: it is not to make you respond in a passive aggressive tone, but to show alternatives of how you might feel like saying something, reframed better in at least some cases. He confirms the data comes from the Instagram content creator and that the credits are given.

Then the caveats. He says he is looking into improving the content to make it less satire and more appropriate for most people, and he writes that anyone planning to use a phrase word for word should not, should take it as a grain of salt and not take it too seriously at this point until the content is better structured. He closes by saying people who feel negative about it should not take it very seriously.

The section headings around it reinforce the point. The bugs paragraph points at a bug report template, the requests paragraph at a feature request template, and contributions are invited with a pointer to a CONTRIBUTING.md guide.

For an adopter, the practical reading is that this is a curated list with an acknowledged tone problem. Anyone deploying it internally to a team should expect to rewrite most entries before they are usable, and anyone citing the project as professional communication guidance is citing satire.

## Next.js 12, pages router, and a static export for Cloudflare Pages

The technology stack is three lines in the README: Next.js as the framework, TailwindCSS for styling, and Cloudflare Pages for deployment. The topic tags add cloudflare-pages, nextjs and tailwindcss, and the repository layout matches that stack with next.config.js, tailwind.config.js, postcss.config.js, styles/ and pages/.

The pages directory rather than an app directory is the detail that dates the project. The dependency is next at 12.1.5 with React and React DOM at 18.1.0, and the presence of next-env.d.ts and next.config.js belongs to that era of the framework. A reader starting fresh today would choose a different major version, and anyone contributing should be aware the code targets a framework line that is no longer current.

The package.json is marked private, which is correct for an application rather than a published library, and it defines exactly four scripts:

```json
{
  "dev": "next dev",
  "build": "next build",
  "start": "next start",
  "export": "next export"
}
```

The export script is the one that matters for the stated deployment target. A static export produces plain files with no Node server, which is what a Pages deployment wants, and the fact that a dedicated export path exists rather than only a server start is a sign the author intended a fully static site from the beginning.

Tooling is Yarn, with a yarn.lock in the root and a .node-version file pinning the Node version, plus .vscode/ for editor settings. Formatting is Prettier with prettier-plugin-tailwindcss, and the Tailwind forms plugin is a dev dependency, which is the usual arrangement for a Tailwind site with form elements.

## What the client side libraries are actually doing

The dependency list is short enough to read as a description of the user interface.

match-sorter is the interesting one. The dependency list includes match-sorter, suggesting that the phrase collection supports search or ranking.

zustand is listed at version 4.0.0-rc.1, alongside a store/ directory in the repository root. A release candidate rather than a stable tag is a small risk for a dependency, though for a static site the blast radius is limited to the build.

The interface dependencies include @headlessui/react, react-feather, react-share and clsx. Preact appears as a dependency alongside React and React DOM, but the repository does not explain its intended role. The repository gives no explanation, and that is a small unexplained loose end for a contributor.

The hooks/ and lib/ directories complete the picture, with hooks holding React hooks and lib/ the shared utilities. Nothing in the dependency list suggests a backend, a database or an API, which is consistent with a site that ships its content as files.

## Maintenance: the last push was on 2026-04-05

The repository is not archived, and the last push was on 2026-04-05, more than six months before the date of this article. There are no GitHub releases, so there is no tag history and no changelog to consult beyond the commit log.

For a site whose content changes through contributions rather than through code, that split matters. Adding a phrase is a content pull request and does not need a release, so a quiet release history is not by itself evidence of a problem. The dependency versions are the part to weigh: Next.js 12, React 18.1, a zustand release candidate, TypeScript 4.5.4 and TailwindCSS 3, so adopters should check their current support and upgrade options before reusing the pinned setup.

A site with no server and no database has a very small attack surface, which is the main argument for not worrying. The residual risk is the build toolchain, and that is the thing to look at if you are thinking of forking this.

The licence is MIT with a LICENSE file at the root, which for a phrase collection is the permissive end of the spectrum. No legal advice is offered here, but an adopter should also review the README's credit to @loewhaley and determine what licence terms apply to the reused content.

## What the alternative is, and who should skip this entirely

The honest alternative for the underlying job, reframing a terse message before sending it, is a model you already have access to. The skill the site sells is prompt-shaped: describe the situation, get a less abrasive phrasing. A team that already uses an assistant can do that in one message, and does not need a website, a repository or a deployment to do it.

The second alternative, for organisations, is a team playbook in the repository they already maintain. A short document of house phrasings, written by the people who work together, will always be more accurate than a public list collected from a social media account, and it is reviewable in the same pull request as the code it describes.

That is also the strongest case for the project, and it is narrow. As a contribution project it is a clean, small, well-bounded codebase where a first-time Next.js contributor can add entries, and the presence of a CONTRIBUTING.md, two issue templates and a linked blog post about the project means the maintainer has thought about that. As a reference for a team or a company, it is a list that the README itself asks you not to quote.

The failure mode to avoid is treating a phrase list as professional communication training. The author is careful to say the content is satire that he intends to restructure, and a site that says so should not be cited as authority for how to talk to a colleague.

## Conclusion

Treat howtoprofessionallysay as a content collection rather than a dependency: the value is the phrase list, the code is a thin static site, and the author explicitly asks that the wording not be used word for word. If you want to contribute phrases or build a similar internal reference, the Next.js 12 and pages directory setup is a workable starting point with yarn.lock and a static export target. Verify first what you are actually adopting, because the last push was on 2026-04-05 and the README itself describes the content as satire that needs better structuring before it suits most people.

## FAQ

### What is howtoprofessionallysay?

It is a static website that collects common workplace phrases and offers reframed alternatives, built with Next.js and TailwindCSS and deployed on Cloudflare Pages. The content is credited to the Instagram creator @loewhaley.

### Can I use the phrases from howtoprofessionallysay word for word?

The README asks you not to. The author writes that anyone who intends to use a phrase word for word should not, and should take the content as a grain of salt and not too seriously until it is better structured, describing the current content as satire that he wants to make more appropriate for most people.

### How do I run howtoprofessionallysay locally?

The package.json defines dev, build, start and export scripts, and the repository ships a yarn.lock and a .node-version file, so it is a Yarn project on Next.js 12. The export script runs next export for a static build suitable for Cloudflare Pages.

### Is howtoprofessionallysay available as an npm package?

No. The package.json is marked private and there is no publish configuration, so the repository is an application rather than a library. Its licence is MIT with a LICENSE file at the root.

## Sources

- [AkashRajpurohit/howtoprofessionallysay on GitHub](https://github.com/AkashRajpurohit/howtoprofessionallysay)
- [Issues](https://github.com/AkashRajpurohit/howtoprofessionallysay/issues)
- [License: MIT](https://github.com/AkashRajpurohit/howtoprofessionallysay/blob/main/LICENSE)
- [Project website](https://howtoprofessionallysay.akashrajpurohit.com/)
- [README](https://github.com/AkashRajpurohit/howtoprofessionallysay/blob/main/README.md)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/akashrajpurohit-howtoprofessionallysay
