useEffect(() => axios.get( /api/timeline/$pairId ).then(res => setEvents(res.data.events); setFriendName(res.data.friendName); ); , [pairId]);

| Method | Endpoint | Description | |--------|----------|-------------| | POST | /api/pair/create | Create a friendship pair | | POST | /api/pair/join | Join with invite code | | GET | /api/timeline/:pairId | Get both users’ events sorted by year | | POST | /api/secrets | Create a secret letter | | POST | /api/secrets/unlock | Unlock when friend reciprocates | | GET | /api/progress/:pairId | Compare goals & challenges |

// SecretLetter model const letterSchema = new Schema( pairId: type: Schema.Types.ObjectId, ref: 'FriendPair' , fromUser: type: Schema.Types.ObjectId, ref: 'User' , contentEncrypted: String, // encrypted with user's key unlocked: type: Boolean, default: false , unlockCondition: type: String, enum: ['mutual', 'time', 'milestone'] );

L’amica geniale is a landmark of contemporary literature. It reminds us that our identities are often forged in the heat of our earliest relationships. Whether you are reading the books or watching the series, the story of Lenù and Lila is a haunting reminder that we are all, in some way, defined by the people we try to leave behind.