diff --git a/frontend/src/components/drawer/DrawerSection.tsx b/frontend/src/components/drawer/DrawerSection.tsx index 14874e4..8251fb2 100644 --- a/frontend/src/components/drawer/DrawerSection.tsx +++ b/frontend/src/components/drawer/DrawerSection.tsx @@ -68,7 +68,8 @@ export function DrawerSection({
{count} - {" "} + +   {subtext}
diff --git a/frontend/src/components/drawer/PasskeyModal.tsx b/frontend/src/components/drawer/PasskeyModal.tsx index e33a38b..fea647f 100644 --- a/frontend/src/components/drawer/PasskeyModal.tsx +++ b/frontend/src/components/drawer/PasskeyModal.tsx @@ -41,10 +41,15 @@ export function PasskeyModal() { required type="password" placeholder="password" + data-testid="passkey-input" className="font-sans validator input input-bordered rounded-r-none" />
- diff --git a/frontend/src/components/editor/PostSealModal.tsx b/frontend/src/components/editor/PostSealModal.tsx index 1cf964f..4f16c26 100644 --- a/frontend/src/components/editor/PostSealModal.tsx +++ b/frontend/src/components/editor/PostSealModal.tsx @@ -25,10 +25,11 @@ export function PostSealModal({

When you're ready,
- you can{" "} - read it,{" "} + you can  + read +   it,  send it to - someone, or{" "} + someone, or  burn it to release

@@ -36,12 +37,12 @@ export function PostSealModal({

Be assured that the letter will find you when the time is right.
- Till then,{" "} + Till then,  take a deep breath , manifest - , and{" "} + , and  let it rest diff --git a/frontend/src/components/editor/ToolBar.tsx b/frontend/src/components/editor/ToolBar.tsx index ef16a4a..966e61d 100644 --- a/frontend/src/components/editor/ToolBar.tsx +++ b/frontend/src/components/editor/ToolBar.tsx @@ -194,6 +194,7 @@ export function ToolBar({

+   for your  + letters, with  Envelope Encryption - {" "} - for the keys. + +   for the keys. -
- This means, both the{" "} - encryption and{" "} +
+ This means, both the  + encryption and  decryption runs on your device, in your browser. -
@@ -296,17 +302,18 @@ function SpecsSection() { Nothing on the server is readable without your actual password.
Even if someone were to breach in, all they'd find is encrypted - noise and ain't no way they crackin' it.{" "} + noise and ain't no way they crackin' +
- (unless this happens) +  (unless this happens) -
+

- Of course, this level of{" "} + Of course, this level of  privacy comes with a - catch. No password reset{" "} - for you. + catch. No password reset +   for you.

Your original password is never stored @@ -350,26 +357,27 @@ function SpecsSection() { function OSSSection() { return ( -

+

- is{" "} + is   private only for -  your letters {" "} +  your letters   - {" "} + +   open source !

-
+

is ...uhhh... pretty @@ -377,12 +385,14 @@ function OSSSection() { about privacy and encryption is publicly available in the code so you don't have to take my word at it.

-

- You can also{" "} - Self-host{" "} - in just 4 steps. +

+ You can also  + Self-host +   + in just   + 4 steps.

-
+
             git clone https://git.ramvignesh.dev/me/pi-ku.git
           
@@ -397,7 +407,7 @@ function OSSSection() {
- {/* Dict Card */}
@@ -533,7 +548,7 @@ function StorySection() { postscript; a note written after the letter is signed.
- "the most honest thing was always in the{" "} + "the most honest thing was always in the  பி. கு."
@@ -559,7 +574,7 @@ function StorySection() { is an abbreviated transliteration of the தமிழ் (Tamil) word - for{" "} + for  {" "} - —the thing you add after you've already signed your name, what - you write when you thought you were finished, but weren't. + +   —the thing you add after you've already signed your + name, what you write when you thought you were finished, but + weren't.

@@ -594,7 +610,7 @@ function StorySection() {
It sits in drafts , in half-written notes, in the pause before we change the subject.
- Those words{" "} + Those words  {" "} - stay{" "} + +   stay  unsaid @@ -640,10 +656,9 @@ function ForWhoSection() { wasn't built for one kind of person, but a particular kind of feeling— - {" "} - the one that lingers very quietly - {" "} - —fragile, yet never breaks. +   the one that lingers very quietly +
+   —fragile, yet never breaks.

@@ -672,7 +687,7 @@ function ArchetypesSection() { > The Archetypes -

of writing

+

of writing

- - {" "} - To someone you can't reach anymore. + + +   To someone you can't reach anymore.

@@ -692,7 +707,8 @@ function ArchetypesSection() { finished.

-

+

+ Write the letter anyway. Keep it close.

@@ -712,8 +728,8 @@ function ArchetypesSection() { weight="duotone" className="text-accent" size={32} - />{" "} - To someone who's still here. + /> +   To someone who's still here.

@@ -722,7 +738,8 @@ function ArchetypesSection() { noise of a conversation already in motion. A letter slows it down.

-

+

+ Give people their due flowers while they can still smell them.

@@ -742,7 +759,8 @@ function ArchetypesSection() { weight="duotone" className="text-accent" size={14} - />{" "} + /> +   -

+

+ Set a date and let a letter surprise you when you've long forgotten writing it.

@@ -775,8 +794,8 @@ function ArchetypesSection() { name="my-accordion-det-1" > - {" "} - For liberation. + +   For liberation.

@@ -785,7 +804,8 @@ function ArchetypesSection() { putting it somewhere outside of yourself.
That's sometimes enough.

-

+

+ Say it once. All of it. Then let it fade.

@@ -864,16 +884,16 @@ function AttributionSection() {

took a while to exist.
- This started as a{" "} + This started as a 
CS50W - {" "} - capstone—one I kept postponing until I ran out of excuses. - When I sat down to build it, it felt heavier than a typical + +   capstone—one I kept postponing until I ran out of + excuses. When I sat down to build it, it felt heavier than a typical assignment—not just because things were difficult. It had to be something that outlasted the grade. I wanted to make this one count more than anything else I'd ever made. Something as close to @@ -885,19 +905,19 @@ function AttributionSection() { Of course, frustrations, id-exisi crises, crept in from time to time. But helped me re-kindle the love for the odd hours spent obsessing over the tiniest UX decisions and - endlessly polishing the UI{" "} + endlessly polishing the UI  (only if I could've just made my mind up on one design system sooner, instead of paddling in a sea of muses, muses everywhere) - . I know I've shared the nuts and bolts of {" "} - here—the core philosophies, how it all works—but the - heart of it is really something you have to find by exploring it + . I know I've shared the nuts and bolts of +   here—the core philosophies, how it all works—but + the heart of it is really something you have to find by exploring it yourself.

The "why" behind all of this didn't just appear out of nowhere. For - a while, I kept coming back to{" "} + a while, I kept coming back to  setHover((h) => ({ ...h, visible: false }))} > Saajan - {" "} - from{" "} + +   from  The Lunchbox - {" "} - —brought to life with such subtle brilliance by{" "} + +   —brought to life with such subtle brilliance by  Irrfan Khan - {" "} + +   —the quiet emotional weight he carries through a lonely and mechanized life, right up until those letters arrive and something - inside him finally loosens. The ending feels like a deep sigh of{" "} + inside him finally loosens. The ending feels like a deep sigh + of  "it is what it is" @@ -947,15 +969,15 @@ function AttributionSection() { that a lot.

- There's a lot that goes{" "} + There's a lot that goes  unsaid - {" "} - these days. Not for a lack of feeling, not for the lack of time, but - because the ways we reach each other have quietly changed. We're - always reachable digitally, yet - somehow the things that actually matter most end up staying - inside—a trapped one at that. + +   these days. Not for a lack of feeling, not for the lack of + time, but because the ways we reach each other have quietly changed. + We're always reachable digitally, +   yet somehow the things that actually matter most end up + staying inside—a trapped one at that.
Maybe writing can/will help. Maybe putting words somewhere deliberate makes them feel less like a weight you're carrying alone. @@ -973,7 +995,7 @@ function AttributionSection() {

P.S. And just so we're clear—I wrote every word of this - myself—as I continue to back{" "} + myself—as I continue to back  Em DASH - . Why should AI get to have all the fun with 'em em dashes?{" "} + . Why should AI get to have all the fun with 'em em dashes?  (get it?)

@@ -990,10 +1012,10 @@ function AttributionSection() { weight="duotone" size={48} className="rotate-180 text-neutral-content" - />{" "} - I think we forget things if there is nobody to tell them. + /> +   I think we forget things if there is nobody to tell them. - ~ Saajan Fernandes,{" "} + ~ Saajan Fernandes,  The Lunchbox diff --git a/frontend/src/pages/Activate.tsx b/frontend/src/pages/Activate.tsx index ccdb492..15597fa 100644 --- a/frontend/src/pages/Activate.tsx +++ b/frontend/src/pages/Activate.tsx @@ -59,7 +59,8 @@ export default function Activate() { You're in.

- Welcome to + Welcome to  +
Just one more step and you can start writing timeless letters.

diff --git a/frontend/src/pages/Drawer.test.tsx b/frontend/src/pages/Drawer.test.tsx index 3001514..b8acdcd 100644 --- a/frontend/src/pages/Drawer.test.tsx +++ b/frontend/src/pages/Drawer.test.tsx @@ -94,7 +94,7 @@ describe("Drawer Page", () => { ); expect(screen.getByTestId("passkey-modal-title")).toBeInTheDocument(); - expect(screen.getByPlaceholderText(/password/i)).toBeInTheDocument(); + expect(screen.getByTestId("passkey-input")).toBeInTheDocument(); }); it("renders the welcome letter when firstTime state is present", () => { diff --git a/frontend/src/pages/Drawer.tsx b/frontend/src/pages/Drawer.tsx index 0be1e0c..5f05d3f 100644 --- a/frontend/src/pages/Drawer.tsx +++ b/frontend/src/pages/Drawer.tsx @@ -58,7 +58,7 @@ export default function Drawer() { Personal Archive
- Welcome Back{" "} + Welcome Back  {user.full_name}
- -
- Don't have an account?{" "} +
or
+
+ New to + ?  + .
diff --git a/frontend/src/pages/Register.tsx b/frontend/src/pages/Register.tsx index b28403a..f7b82a7 100644 --- a/frontend/src/pages/Register.tsx +++ b/frontend/src/pages/Register.tsx @@ -77,7 +77,8 @@ export default function Register() {
- Create a Account + Create a + Account
{apiError && ( @@ -143,9 +144,9 @@ export default function Register() {

Choose a password you won't forget.
- Just like life,{" "} - there is no reset{" "} - here. If you lose it, your letters cannot be recovered. + Just like life,  + there is no reset +   here. If you lose it, your letters cannot be recovered.

@@ -160,10 +161,23 @@ export default function Register() { {isLoading ? ( ) : ( - "Register" + "Begin" )}
+
or
+
+ Been here before?  + + . +
diff --git a/frontend/src/pages/VerifyEmail.tsx b/frontend/src/pages/VerifyEmail.tsx index 03145c0..1af9b36 100644 --- a/frontend/src/pages/VerifyEmail.tsx +++ b/frontend/src/pages/VerifyEmail.tsx @@ -23,8 +23,8 @@ export default function VerifyEmail() { Check Your Mailbox

- You're one train away from starting your {" "} - journey. + You're one train away from starting your +   journey.