Katkat

Design a simple greeting-card web app

AtlassianSoftware Engineer · Technical Screen

Last updated

This question assesses the ability to design a scalable, functional MVP for a greeting-card service, focusing on user-generated content storage and retrieval.

Problem Statement

Design a web-based greeting-card application that allows users to create, personalize, and share digital cards. The core workflow involves a user choosing a template, adding a custom message, and generating a unique URL to send to a recipient.

Functional Requirements

  1. Users can select from a pre-defined set of card templates.
  2. Users can input a custom text message to be displayed on the card.
  3. The system should generate a unique, shareable link for each card.
  4. Recipients can view the card by navigating to the unique link.

Non-Functional Requirements

  1. The system should be able to handle roughly 10,000 creations and 50,000 views per day.
  2. Low latency for card viewing is a priority.
  3. The design should account for data persistence and basic security (e.g., preventing unauthorized edits).

Deliverables

  • Provide a high-level architecture diagram or description.
  • Define the API endpoints required for the MVP.
  • Outline the database schema for cards and templates.
  • Explain the trade-offs in your storage choice (e.g., SQL vs. NoSQL) for card content.

Hints

Hint 1

Consider whether the card content should be stored as structured database rows or as document-based blobs.

Hint 2

Think about how to secure the URL so that only the sender can edit the card, but anyone with the link can view it.

Hint 3

Address how you would handle the scale of 50,000 views per day using caching or CDN strategies.

Follow-up questions

  • How would you implement an expiration policy where cards are deleted or archived after 30 days?
  • If we wanted to allow users to upload custom images for the card background, what cloud services would you integrate?
  • How would you track analytics, such as the number of times a specific card has been opened, without compromising performance?