Feat: contact-us - #52
Merged
Merged
Conversation
A public page where a visitor can send a message without an account, and
a dashboard section for reading and triaging what arrives.
- /{lang}/contact-us with the form; subject and body are required, and at
least one of email or phone so there is a way to reply
- /dashboard/contact-us lists messages with a read/unread toggle, a detail
view, and delete, each gated on its contactus.* permission
- A "contact us" link joins the footer, which is regrouped so the site
links sit together and the tagline sits on the opposite edge
- Public and private DAL modules for the endpoints, and en/fa strings
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The frontend for contact-us: a public page where a visitor can send a message without an account, and a dashboard section for reading and triaging what arrives.
Pairs with backend PR Tarhche/backend#72 — this branch calls
POST /api/contact-usand the four/api/dashboard/contact-usendpoints that PR adds. Merge the backend first, or the page will 404 against the API.What's here
Public —
/{lang}/contact-us. Subject and body are required, plus at least one of email or phone so there's a way to reply. Field errors come back translated from the API.Dashboard —
/dashboard/contact-us: a table with a read/unread toggle, a detail view, and delete. Each action is gated on its owncontactus.*permission, so a role can be given read-only access to the inbox.Footer — a "contact us" link joins it. The footer is regrouped while I was there: site links cluster together and the tagline sits on the opposite edge. It relies on the document's
dirto flip the row, so there's no per-language positioning.Supporting —
src/dal/public/contact.tsandsrc/dal/private/contact.ts, acontactusblock inapp-permissions.ts, two entries inapp-paths.ts, a sidebar item, and thecontactUs.*strings inen.json/fa.json.Notes for review
app-pathsentries are the only edits to files this feature doesn't own — those, plus the two dictionaries, are where it can conflict with the sibling PRs.tsc --noEmitandnext buildon this branch alone; both/{lang}/contact-usand/dashboard/contact-usappear in the route manifest. The repo has jest configured but no test files, so there's no suite to run.prettier --checkreports four files on this branch — all of them already unformatted onmain, untouched here. Their fixes are in a separate chore PR.Relationship to the other PRs
Split out of one working branch alongside notes and block users. All three are cut from
mainand mergeable in any order; the overlap isapp-paths.ts,app-permissions.ts,layout-sidebar.tsxand the two dictionaries, and every conflict there is additive on both sides.🤖 Generated with Claude Code