Reader Management System
Complete guide to reader registration, subscriptions, institutional access, sessions, GDPR compliance, and reader portal
1. Simple Feature Overview
The Reader Management System is the central hub for managing everyone who reads content on Hyphen. It covers the complete reader lifecycle — from the moment a person signs up, through their subscription journey, all the way to account deletion if they choose to leave.
What You Can Do
| Capability | What It Means |
|---|---|
| Reader Registration | Readers sign up via email/OTP, Google, or Facebook on the Reader Portal |
| Reader Directory | Browse, search, filter, and manage all readers from the Admin Console |
| Profile Management | View and edit reader profiles, including personal information and account status |
| Subscription Plans | Create and manage subscription tiers (Digital Only or Print+Digital) with pricing and features |
| Subscription Assignment | Grant complimentary subscriptions, manage upgrades, cancellations, and renewals |
| Gift Subscriptions | Track gifted subscriptions from purchase through activation |
| Institutional Subscriptions | Manage institution-wide access with seat-based licensing and user invitations |
| Bulk Subscriptions | Handle large subscription requests with seat allocation and email processing |
| Session Management | Monitor reader devices, revoke sessions, configure security settings |
| Notifications | Readers receive notifications for new issues, renewals, content, and comments |
| Email Preferences | Readers control what emails they receive — newsletters, reminders, promotions |
| Bookmarks & History | Readers save articles and track their reading progress |
| GDPR Compliance | Export reader data, anonymize accounts, and handle deletion requests |
| Reader Moderation | Ban/unban readers, moderate comments, manage reports |
| Future Readers Program | Manage student enrollments, institutes, and discount programs |
How the Reader Journey Works
Reader visits Reader Portal
↓
Signs up with email/OTP, Google, or Facebook → Free account created
↓
Optionally subscribes to a plan → Becomes a Subscriber
↓
Reads content, saves bookmarks, comments on articles
↓
Admin monitors engagement, handles support, manages subscriptions
↓
Reader manages their own account, preferences, and sessions
↓
If needed: GDPR export, account deletion, or anonymization2. Who Should Use This Feature
| Role | What You'll Do |
|---|---|
| Operations Team | Monitor reader metrics, manage the reader directory, handle subscription issues, process bulk requests |
| Customer Success | Help readers with account problems, grant complimentary access, troubleshoot login/session issues, handle GDPR requests |
| QA Team | Test registration flows, verify subscription behavior, validate notification delivery, check Reader Portal pages |
| Admin Users | Configure subscription plans, session settings, moderation rules, and RBAC permissions |
| Marketing Team | View reader growth metrics, manage the Future Readers Program, track subscription conversions |
| Finance / Billing | Review payment history, track revenue metrics, manage refunds |
| Readers (self-service) | Register, manage their profile, subscriptions, bookmarks, sessions, preferences, and account deletion via the Reader Portal |
3. Before You Begin
Prerequisites Checklist
| Step | What to Check | Where to Check |
|---|---|---|
| 1. Admin account | You have an Admin Console login with the appropriate permissions (see Section 5.17 for required permissions) | Ask your Admin to create your account under Settings → Admin Users |
| 2. Subscription plans | At least one subscription plan exists and is active | Readers → Subscriptions in Admin Console |
| 3. Payment gateway | Razorpay and/or Stripe credentials are configured if you need paid subscriptions | Settings → Payment Settings — your DevOps team sets this up |
| 4. Email/SMTP | Email sending is configured for OTP delivery, password resets, and notifications | Settings → Email Settings — confirm SMTP is working |
| 5. Reader Portal | The Reader Portal is deployed and accessible to readers | Visit your Reader Portal URL and confirm the login page loads |
| 6. Session settings | Session timeout, device limits, and security settings are configured | Settings → Sessions in Admin Console |
| 7. Moderation settings | Comment moderation rules and profanity filters are configured (if comments are enabled) | Readers → Moderation → Settings tab |
| 8. OAuth providers | Google and/or Facebook OAuth are set up (if you want social login) | Your DevOps team configures OAuth credentials |
Important: Subscription plans must be created before you can assign subscriptions to readers. Payment gateways must be configured before readers can purchase subscriptions on their own. Email/SMTP must work before OTP login, password resets, and notifications will function.
Dependencies Between Modules
| If You Want To... | You Also Need... |
|---|---|
| Let readers sign up with OTP | Email/SMTP configured |
| Let readers sign up with Google/Facebook | OAuth provider credentials configured |
| Let readers purchase subscriptions | At least one active subscription plan + Razorpay/Stripe configured |
| Send renewal reminders | Email/SMTP configured + automated tasks running |
| Grant complimentary subscriptions | At least one active subscription plan created |
| Set up institutional subscriptions | Institutions module configured under Sales → Institutions |
| Send push notifications | VAPID keys configured (DevOps) |
| Process gift subscriptions | At least one plan with "Allow Gift" enabled |
| Print magazine delivery | Magazine schedule configured + print delivery settings on subscription plan |
4. Key Terms in Simple Language
| Term | What It Means |
|---|---|
| Reader | Anyone who has an account on the Reader Portal — they may be a free user or a paying subscriber |
| Subscriber | A reader who has an active subscription plan (paid, complimentary, gift, or institutional) |
| Free Reader | A registered reader without a subscription — they can access free content, bookmark articles, and comment |
| Tier | The access level of a reader: Free, Registered, Subscriber, Institutional, or Admin |
| Subscription Plan | A predefined package (e.g., "Monthly Digital" or "Annual Print+Digital") with specific pricing and features |
| Complimentary Subscription | A subscription granted manually by an admin at no cost to the reader — e.g., for authors, partners, or promotions |
| Gift Subscription | A subscription purchased by one person (the buyer) for another person (the recipient) |
| Institutional Subscription | A subscription purchased by an organization (university, library, company) that gives access to multiple readers (seats) |
| Bulk Subscription | A large subscription request (multiple seats) handled through a negotiation and fulfillment process |
| OTP | One-Time Password — a 6-digit code sent to the reader's email for login verification |
| Session | A record of a reader being logged in on a specific device or browser |
| Device Limit | The maximum number of devices a reader can be logged in from at the same time |
| Renewal | When a subscription period ends and the next billing cycle begins automatically |
| Churn | When a subscriber cancels or lets their subscription expire |
| GDPR | General Data Protection Regulation — privacy rules that give readers the right to access, export, and delete their personal data |
| Anonymization | Permanently removing all personal information from a reader's account (email is hashed, name/phone/profile are erased) — this cannot be undone |
| Data Export | Downloading all of a reader's data as a JSON file — includes profile, subscriptions, bookmarks, comments, and reading history |
| Ban | Blocking a reader from accessing the platform — can be temporary or permanent |
| Moderation | Reviewing reader comments and reports to enforce community standards |
| Entitlement | A specific feature or access right included with a subscription plan (e.g., unlimited access, archive access, print delivery) |
| Billing Period | How often a subscription is charged: monthly, quarterly, annual, or one-time |
| Past Due | When a subscription payment has failed but the subscription hasn't been cancelled yet |
| Magazine Schedule | A calendar of print magazine delivery dates for Print+Digital subscribers |
| Future Readers Program | A program offering discounted or free subscriptions to students through competitions or verified student discounts |
5. Step-by-Step Setup Guide
5.1 Reader Registration and Login Flows
Readers create their accounts on the Reader Portal (not the Admin Console). There are several ways to sign up and log in.
How a Reader Registers (Reader Portal)
- The reader visits the Reader Portal and clicks "Don't have an account?" (or navigates to
/register). - They see the "Create your account" page with these benefits listed:
- Save articles to your bookmarks
- Comment on articles
- Weekly newsletter with top picks
- Access to free content library
- They fill in:
- Full name (optional)
- Email address (required)
- Subscribe to our weekly newsletter checkbox (checked by default)
- I agree to the Terms of Service and Privacy Policy checkbox (required)
- They click "Create Account".
- A 6-digit OTP is sent to their email.
- They enter the OTP on the verification screen and click "Verify & Sign In".
- Their account is created and they are logged in.
Alternative — Social Sign-Up:
- The reader can click "Sign up with Google" or "Sign up with Facebook" instead.
- They must accept the Terms of Service checkbox before social sign-up buttons become active.
- A message appears: "Please accept the terms above to use social sign-up" if they try to click before accepting.
How a Reader Logs In (Reader Portal)
- The reader visits the Reader Portal and navigates to
/login. - They see the "Welcome back" page.
- They enter their email address and click "Send OTP".
- A 6-digit OTP is sent to their email.
- They enter the code and click "Verify & Sign In".
- They are logged in.
Alternative — Social Login:
- Click "Sign in with Google" or "Sign in with Facebook".
Alternative — Password Login:
- If the reader has set a password (e.g., through password reset), they can use email + password to log in.
Forgot Password Flow
- From the login page, the reader clicks "Forgot your password?".
- They enter their email address and click "Send Reset Link".
- They see: "If an account exists for [email], you'll receive a password reset link shortly."
- They check their email for the reset link.
- They click the link, which takes them to the "Reset your password" page.
- They enter a new password that meets the requirements:
- At least 8 characters
- Contains a letter
- Contains a number
- They confirm the password and click "Reset Password".
- They see a success message and can click "Sign in" to log in with their new password.
Tip: The reset link expires after a set period. If the reader's link has expired, they'll see an "Invalid Reset Link" message and can request a new one.
5.2 Reader Directory and Profile Management in Admin Console

The Reader Directory is where admin users browse and manage all registered readers.
Accessing the Reader Directory
- Log in to the Admin Console.
- Click "Readers" in the sidebar.
- You'll see the Readers Overview dashboard with key metrics:
- Reader Growth: Total Readers, New This Week, New This Month, Growth Rate
- Subscription Health: Active Subscribers, Churn Rate, Trial Conversions, Avg Subscription Value
- Engagement: Active Today, Avg Session Duration, Articles Read Today, Comments Today
- Moderation Snapshot: Pending Comments, Flagged Items, Open Reports, Banned Users
- Click "Reader Directory" (or navigate to Readers → Directory).
Browsing and Filtering Readers
On the Reader Directory page, you'll see:
- Stats Cards at the top: Total Readers, Subscribers, Institutional Users, New This Month
- Search bar — search by name or email
- Filter dropdowns:
- Status: All Status, Active, Inactive, Banned, Pending Verification
- Tier: All Tiers, Free, Registered, Subscriber, Institutional
- Subscription Status: All, Active, Cancelled, Expired, Past Due, Trial, Complimentary
- Clear Filters button to reset all filters
The reader list shows a table with columns:
- Name — the reader's display name
- Email — their email address
- Tier — their access level (Free, Registered, Subscriber, Institutional)
- Status — their account status (Active, Inactive, Banned, Pending Verification)
- Joined Date — when they registered
- Last Login — when they last logged in
- Actions — View (→), Ban, Delete
Viewing a Reader's Profile
- In the Reader Directory, click the View (→) button on any reader row.
- You'll see the Reader Details page with breadcrumbs: Readers → Directory → [Reader Name].
The page includes:
User Summary Card (always visible at top):
- Avatar with initials
- Status badge (Active / Inactive / Banned / Pending Verification)
- Tier badge (Free / Registered / Subscriber / Institutional / Admin)
- Trusted badge (if applicable)
- Edit Profile button
- Quick stats: Member since, Last login, Total logins, Comments
Action Buttons (top right):
- Refresh — reload reader data
- Grant Subscription — appears if the reader has no active subscription and is not institutional
- Reset Password — sends a password reset email to the reader
- Ban Reader / Unban — depending on current status
Profile Information Card:
- Bio, Location, Website, Joined date, Last login, Total logins, Comment count
Subscription Card:
- Plan name, Status badge (Active / Past Due / Cancelled / Complimentary)
- Start date, Renewal/End date, Payment method
- Actions: Extend subscription, Cancel subscription
Institutional Subscription (if applicable):
- Institution name, Access dates, Seat count
Devices List:
- Each device shows: Device name, Last seen date, Revoke button
GDPR Actions:
- Export Data — downloads all reader data as a JSON file
- Anonymize — permanently removes all personal information (requires confirmation)
Editing a Reader's Profile
- On the Reader Details page, click "Edit Profile" in the User Summary Card.
- Edit the reader's name and email inline.
- Save your changes.
Note: You cannot change a reader's password directly. Use the "Reset Password" button to send them a reset link.
Exporting the Reader Directory
- On the Reader Directory page, click the Export button (download icon) in the top right.
- A file containing the filtered reader list will download.
- This requires the
USERS_EXPORTpermission.
5.3 Create and Manage Subscription Plans

Subscription plans define what readers get when they subscribe. You must create at least one plan before readers can subscribe.
Viewing Existing Plans
- Navigate to Readers → Subscriptions in the Admin Console sidebar.
- You'll see the Individual Subscriptions page with:
- Key Metrics: Active Subscribers, New This Month, Churned This Month, Monthly Revenue
- Revenue Metrics: Annual Recurring Revenue, Avg Revenue Per User, Trial Conversions, Conversion Rate
- Subscription Plans section showing all plans in a card grid
Each plan card shows:
- Plan name and display name
- Plan type (Digital Only / Print+Digital)
- Price (monthly and/or annual)
- Features list
- Subscriber count
- Edit and Delete buttons
- Active/Inactive toggle
Creating a New Plan
- Click the "Add Plan" button (+ icon) in the top right.
- A slide-out panel appears: the Plan Editor.
- Fill in the following sections:
Basic Info:
| Field | What to Enter |
|---|---|
| Plan Name (required) | Internal name (e.g., "monthly_digital") — not shown to readers |
| Display Name | What readers see (e.g., "Monthly Digital") |
| Description | A short description of the plan |
| Plan Type | Choose DIGITAL_ONLY or PRINT_DIGITAL |
| Currency | INR or USD |
| Sort Order | Number that controls display order on the pricing page |
Pricing:
| Field | What to Enter |
|---|---|
| Price One Time | One-time purchase price (in smallest currency unit — paise for INR) |
| Price Monthly | Monthly subscription price |
| Price Annual | Annual subscription price |
| Duration in Months | How long the subscription lasts |
Features & Entitlements:
| Field | What to Enter |
|---|---|
| Display Features | A list of benefits shown to readers (e.g., "Unlimited access to all articles"). You can highlight key features |
| Access Features | Toggle: Unlimited Access, Archive Access, Includes Print |
| Device Features | Max Devices (1–10), Offline Reading toggle |
Options:
| Field | What to Enter |
|---|---|
| Allow Gift | Toggle on if this plan can be purchased as a gift |
| Is Emphasized | Toggle on to highlight this plan on the pricing page |
| Archive Access | Toggle on to give access to archived content |
| Archive Issue Count | Number of archived issues accessible |
Integration:
| Field | What to Enter |
|---|---|
| Razorpay Plan ID | The corresponding plan ID from your Razorpay dashboard (needed for payment processing) |
- Click "Save" to create the plan.
Editing an Existing Plan
- On the Subscriptions page, find the plan card and click "Edit".
- The Plan Editor opens with the current values pre-filled.
- Make your changes and click "Save".
Activating or Deactivating a Plan
- Use the Active/Inactive toggle on the plan card.
- Inactive plans are not shown on the public pricing page.
- Existing subscribers on an inactive plan are not affected.
Previewing the Pricing Page
- Click "Preview Pricing Page" in the top right to see how plans appear to readers on the Reader Portal.
5.4 Assign, Upgrade, and Cancel Subscriptions
Granting a Complimentary Subscription
Use this when you want to give a reader free access — for example, for an author, partner, VIP, or promotional access.
- Navigate to Readers → Directory.
- Find the reader and click View (→) to open their profile.
- Click the "Grant Subscription" button (visible only if the reader has no active subscription and is not institutional).
- A modal appears: "Grant Subscription" with the message "Manually assign a complimentary subscription to [Reader Name]."
- Fill in:
| Field | What to Enter |
|---|---|
| Subscription Plan | Select a plan from the dropdown (auto-populated with active plans) |
| Duration | Choose: 1 Month, 3 Months, 6 Months, or 1 Year |
| Reason | Enter a reason (e.g., "Author complimentary access", "Partner promotion") |
- Click "Grant Subscription".
- The reader's tier changes to Subscriber and their subscription status shows as Complimentary.
Extending a Subscription
- Open the reader's profile in Admin Console.
- In the Subscription card, click "Extend subscription".
- Select the extension duration.
- Confirm the extension.
Cancelling a Subscription (Admin Side)
- Open the reader's profile in Admin Console.
- In the Subscription card, click "Cancel subscription".
- Confirm the cancellation.
- The reader keeps access until the end of their current billing period.
- After that, their tier changes back to Free or Registered.
How a Reader Cancels Their Own Subscription (Reader Portal)
- The reader logs into the Reader Portal.
- Navigates to Account → Subscription (via the sidebar).
- Under "Manage Subscription", clicks "Cancel Subscription".
- A confirmation dialog appears: "Are you sure you want to cancel your subscription? You will continue to have access until the end of your current billing period on [date]."
- The reader clicks "Yes, Cancel".
- Their subscription shows as "Cancels on [date]" until the period ends.
- They can click "Keep Subscription" to change their mind before the period ends.
5.5 Gift Subscriptions
Gift subscriptions allow one person to purchase a subscription for another person.
Managing Gift Subscriptions in Admin Console
- Navigate to Readers → Subscriptions → Gifts (or click the gifts link on the Subscriptions page).
- You'll see the Gift Subscriptions page with:
- Search bar — search by buyer name, recipient email, or gift ID
- Status filter: All Statuses, Pending Payment, Paid, Sent, Activated, Expired
Gift Subscription Lifecycle
| Status | What It Means |
|---|---|
| PENDING_PAYMENT | Gift has been created but not yet paid for |
| PAID | Payment received — ready to send to recipient |
| SENT | Gift notification/email sent to recipient |
| ACTIVATED | Recipient has activated the gift and has an active subscription |
| EXPIRED | Gift was not activated before the expiration date |
Viewing Gift Details
- Click the View button (eye icon) on any gift row.
- A slide-over panel shows:
- Status badge and Gift ID
- Amount (highlighted card)
- Buyer section: name and email
- Recipient section: name, email, phone, address
- Gift Message (if the buyer included one)
- Plan details
- Timeline: Created, Paid, Sent, Activated, Expires dates
- Linked Subscription (if activated — shows reader details and period)
- Payment Reference ID
Changing Gift Status (Admin Action)
- In the gift detail panel, scroll to "Admin Actions".
- Click the appropriate status button to move the gift to the next stage.
- For example, if a gift is PAID but was not automatically sent, you can manually change it to SENT.
Important: Only plans with the "Allow Gift" option enabled can be used for gift subscriptions. Check this in the Plan Editor.
5.6 Institutional Subscriptions and Reader Access

Institutional subscriptions give organizations (universities, libraries, companies) access for multiple readers.
Where to Manage Institutions
- Navigate to Sales → Institutions in the Admin Console sidebar.
- The old path Readers → Subscriptions → Institutional redirects here.
Creating an Institutional Subscription
- Go to Sales → Institutions and click "Add Institution".
- Fill in the institution details:
| Field | What to Enter |
|---|---|
| Name | Institution name (e.g., "Delhi University") |
| Type | University, Library, School, Corporate, Nonprofit, or Other |
| Contact Name | Primary contact person |
| Contact Email | Contact email address |
| Contact Phone | Contact phone number |
| Address | Institution address |
| GSTIN | GST registration number (for Indian institutions) |
| PAN Number | PAN number (for Indian institutions) |
| Billing Address | Billing address details |
| Seats | Number of reader accounts included |
| Plan | Select a subscription plan |
| Start Date | When access begins |
| End Date | When access expires |
| Total Amount | Total contract value |
- Save the institution.
Inviting Readers to an Institution
- Open the institution's detail page.
- Go to the Users tab.
- Click "Add User" or "Invite" to add individual readers.
- To invite multiple readers at once, click "Send Bulk Invitations" and enter the email addresses.
- Each invited reader receives an email with an activation link.
How an Invited Reader Activates Their Account
- The invited reader receives an email with an activation link.
- They click the link and see the "Activate Your Account" page showing: "You've been invited to join Hyphen through [Institution Name]."
- If they don't have an existing account:
- They see their name and email (pre-filled from the invitation).
- They create a password (minimum 8 characters, must contain a letter and a number).
- They confirm the password and click "Create Account".
- If they already have a Hyphen account:
- They see: "An account already exists with this email."
- They click "Link My Account" to connect their existing account to the institutional subscription.
- After activation, they see: "Welcome to Hyphen! Your account has been activated. You now have full access to Hyphen through your institutional subscription."
- They click "Sign In to Get Started".
Renewing an Institutional Subscription
- Open the institution's detail page.
- Click "Renew".
- Update the end date, seats, and amount as needed.
- Save the renewal.
5.7 Bulk Subscription Requests
Bulk subscriptions handle large orders (multiple seats) that require negotiation and manual processing.
Viewing Bulk Requests
- Navigate to Readers → Subscriptions → Bulk (or the bulk subscriptions link).
- You'll see the Bulk Subscription Requests page.
- Filter by status: Pending, Negotiating, Approved, Processing, Completed, Rejected.
Bulk Request Lifecycle
| Status | What It Means |
|---|---|
| Pending | New request received — needs initial review |
| Negotiating | In discussion with the requester about pricing/terms |
| Approved | Terms agreed — ready to process |
| Processing | Subscriptions are being created |
| Completed | All subscriptions created and delivered |
| Rejected | Request was declined |
Processing a Bulk Request
- Click View on an approved request.
- Click "Process" (only available for approved requests).
- A processing modal appears showing:
- Contact name and seat count
- Plan assigned
- In the Recipient Emails text area, paste the email addresses — one per line or comma-separated.
- Tip: "Paste emails from your Excel file. One email per line, or comma-separated."
- Click "Process".
- The system shows results:
- Created: number of subscriptions successfully created
- Skipped: emails that already have subscriptions
- Errored: any failures
Editing a Bulk Request
- Click Edit on a request.
- Update the Status, Negotiated Amount (in INR), or Notes.
- Click "Save".
5.8 Reader Account Pages in Reader Portal
When a reader logs in to the Reader Portal and visits their account, they see a sidebar with these pages:
| Page | What It Shows |
|---|---|
| Profile | Personal information, account security, and the Danger Zone (account deletion) |
| Subscription | Current plan details, benefits, print schedule, payment history, and management options |
| Bookmarks | Articles saved for later |
| Reading History | Recently read articles with progress tracking |
| Notifications | Subscription, content, and system notifications |
| Sessions | Active device sessions with sign-out options |
| Preferences | Content topics, email notifications, reading display, and data privacy |
Profile Page
The reader sees their:
- Avatar (from linked social account or initials)
- Display Name — editable, max 100 characters. Help text: "This is how your name will appear on comments and your public profile."
- Bio — editable, max 500 characters with counter
- Location — editable (e.g., "Mumbai, India")
- Website — editable URL field
- Account Security section showing email (with Verified badge) and password status
- Danger Zone section with "Delete Account" option
Subscription Page
The reader sees:
- Current Plan card with status badge (Active / Past Due / Cancelled / Expired / Trialing / No subscription)
- Plan details: name, type (Individual / Institutional / Gift / Complimentary), billing period, cancellation status
- Print Delivery Schedule (if their plan includes print) — shows upcoming and past deliveries with status (Scheduled / Processing / Shipped / Delivered)
- Your Benefits — checkmark list of included features (e.g., "Unlimited access to all articles", "Full digital archive access")
- Manage Subscription — buttons for "Change Plan" and "Cancel Subscription"
- Payment History table with Date, Description, Amount, and Status (Paid / Pending / Failed)
If the reader has no subscription, they see: "You don't have an active subscription." with a "View Plans & Subscribe" button.
5.9 Bookmarks, Reading History, and Preferences
Bookmarks (Reader Portal)
- Readers save articles by clicking the bookmark icon on any article page.
- The Bookmarks page (
Account → Bookmarks) shows all saved articles. - Each bookmark displays: section tag, read time, article title (clickable), excerpt, author name, and thumbnail image.
- Readers can click "Remove" to delete a bookmark.
- If no bookmarks: "No bookmarks yet. Save articles you want to read later by clicking the bookmark icon." with a "Browse articles" link.
Reading History (Reader Portal)
- Reading history is tracked automatically when a reader opens an article.
- The Reading History page (
Account → Reading History) shows articles grouped by date (Today, Yesterday, X days ago, or the date). - Each entry shows:
- Progress badge (e.g., "45% read" or "Completed")
- Time spent (e.g., "5m" or "1h 30m")
- Article title (clickable)
- Progress bar (visual indicator of how far they've read)
- "Continue" button for partially read articles
- If no history: "No reading history yet. Start reading articles and they'll appear here."
Preferences (Reader Portal)
The Preferences page (Account → Preferences) has five sections:
1. Content Preferences:
- Reader selects topics of interest from available sections and tags.
- Selected topics are shown as highlighted pills.
- Used to personalize the "For You" feed and content notifications.
- Suggested Topics appear if the reader has reading history — shown as dashed-border pills with a "+" icon.
- Status text shows how many topics are selected.
2. Email Notifications:
| Checkbox | Description |
|---|---|
| Weekly Newsletter | "Receive our curated weekly digest of the best content." |
| Renewal Reminders | "Get notified before your subscription expires so you never lose access." |
| New Content Alerts | "Get notified when new content matching your preferred topics is published." |
| New Issue Published | "Get notified when a new magazine issue is published." |
| Comment Replies | "Get notified when someone replies to your comments." |
| Promotions & Events | "Receive information about special offers and literary events." |
3. Push Notifications:
- Browser Push Notifications toggle — "Receive instant notifications in your browser for new issues, content updates, and subscription alerts."
- Only available if the reader's browser supports push notifications.
4. Reading Preferences:
- Font Size: Small, Medium, or Large
- Theme: Light, Dark, or Sepia
5. Data Privacy:
- "Download My Data" button — downloads all reader data as a JSON file named
my-hyphen-data-{DATE}.json. - Help text: "Read our Privacy Policy to learn more about how we handle your data."
After making changes, the reader clicks "Save Preferences".
5.10 Sessions and Device Management
Reader-Side Session Management (Reader Portal)
- The reader navigates to Account → Sessions.
- They see a list of Active Sessions with:
- Device icon (mobile, tablet, or desktop)
- Device name (e.g., "Chrome on Windows")
- "This device" badge on their current session
- IP address and Last active timestamp
- "Sign out" button on non-current sessions
- To revoke a suspicious session, click "Sign out" on that session.
- An info box explains: "Each session represents a device or browser where you are signed in. If you see a session you don't recognise, sign out of it and change your password immediately."
Admin-Side Session and Security Settings
- Navigate to Settings → Sessions in the Admin Console.
- Configure:
| Setting | What It Does | Recommended |
|---|---|---|
| Inactivity Timeout | Users are logged out after this many minutes of inactivity (5–480 range) | 60 minutes |
| Enable Session Refresh | Automatically extends session when user is active | Enable |
| Maximum Concurrent Devices | How many devices a reader can be logged in from simultaneously (1–10) | 3 devices |
| Remember Me Duration | How long "Remember me" keeps the reader logged in (1–90 days) | 30 days |
| Require Re-authentication | Asks readers to confirm their password before changing account settings or making purchases | Recommended for sensitive environments |
- Click "Save" to apply changes.
- The page shows when settings were last updated and by whom.
Revoking a Reader's Session from Admin Console
- Open the reader's profile in Readers → Directory → [Reader].
- Scroll to the Devices section.
- Click "Revoke" next to the device session you want to end.
- The reader will be logged out on that device.
5.11 Notifications and Email Preferences
How Readers Receive Notifications
Readers receive notifications through two channels:
- In-app notifications — visible on the Notifications page in the Reader Portal
- Email notifications — sent to their email based on their preferences
- Push notifications — browser push notifications (if enabled)
Notification Types
| Type | When It's Sent |
|---|---|
| welcome | When a reader creates their account |
| new_issue | When a new magazine issue is published |
| new_content | When new content matching the reader's preferred topics is published |
| subscription_renewal | Before a subscription renewal date |
| subscription_expiry | When a subscription is about to expire |
| comment_reply | When someone replies to the reader's comment |
| system_announcement | Platform-wide announcements |
Notifications Page (Reader Portal)
- Reader navigates to Account → Notifications.
- They see:
- Count of unread notifications (or "All caught up")
- "Mark all as read" button (appears when there are unread notifications)
- "All" / "Unread" filter toggle
- Notification list with: type badge, title (bold if unread), message, timestamp, unread dot indicator
- Each notification has a checkmark button to mark it as read
- Notifications with an action URL are clickable
- "Load more" button for pagination (20 per page)
Email Unsubscribe
- Every email sent to readers includes an unsubscribe link.
- Clicking the link takes them to an unsubscribe page where they can manage their email preferences.
- Readers can also manage email preferences from Account → Preferences → Email Notifications.
5.12 Payment and Subscription Checkout
How a Reader Subscribes (Reader Portal)
- The reader visits the pricing page on the Reader Portal (linked from the subscription page or homepage).
- They see available plans with pricing and features.
- They select a plan and billing period (monthly/annual).
- They are directed to the payment checkout:
- Razorpay — for INR payments
- Stripe — for USD/international payments
- After successful payment, their subscription is activated immediately.
- They can view their subscription details on Account → Subscription.
Payment History (Reader Portal)
- Readers can view their payment history on the Subscription page.
- Each entry shows: Date, Description, Amount, and Status (Paid/Succeeded, Pending, Failed).
Payment Management (Admin Console)
- Admin users can view payments through the admin payment management interface.
- Capabilities include viewing payment details, processing refunds, and tracking payment status across gateways.
Dependency: Payment gateways (Razorpay and/or Stripe) must be configured before readers can purchase subscriptions. Contact your DevOps team to set up gateway credentials.
5.13 Magazine Schedule (Print+Digital)
For subscription plans that include print magazine delivery, you need to configure the delivery schedule.
Setting Up the Magazine Schedule
- Navigate to Readers → Subscriptions → Magazine Schedule.
- You'll see the schedule page with:
- Year filter dropdown (current year ± range)
- "Add Entry" button (+ icon)
- Schedule table with columns: Year, Month, Label, Status, Active toggle
Adding a Schedule Entry
- Click "Add Entry" (+ icon).
- Fill in:
| Field | What to Enter |
|---|---|
| Year | Select the year |
| Month | Select the month |
| Label | A descriptive label (e.g., "Spring 2026 Issue") |
- Click "Save".
Activating/Deactivating a Schedule Entry
- Click the Active toggle in the schedule row.
- A confirmation dialog appears: "Activate/Deactivate Schedule Entry" with the label and month/year.
- Click "Confirm".
Note: Print delivery schedule entries appear on the reader's Subscription page in the Reader Portal under the "Print Delivery Schedule" section.
5.14 Renewal Reminders, Invitation Reminders, and Automated Tasks
The platform sends automated notifications and reminders based on subscription events and system triggers.
Types of Automated Notifications
| Notification | When It's Triggered | Who Receives It |
|---|---|---|
| Renewal Reminder | Before a subscription's billing period ends | Subscribers with renewal reminders enabled |
| Subscription Expiry Notice | When a subscription is about to expire or has expired | The affected subscriber |
| Invitation Reminder | When an institutional invitation has not been activated | The invited reader |
| Welcome Email | When a reader creates their account | The new reader |
| Gift Notification | When a gift subscription is purchased | The gift recipient |
| New Issue Notification | When a new magazine issue is published | Readers with new issue notifications enabled |
| New Content Alert | When content matching a reader's topics is published | Readers with content alerts enabled |
How to Check if Reminders Are Being Sent
-
Check if the reader has Renewal Reminders enabled in their email preferences:
- Open the reader's profile in Admin Console.
- Check their notification preferences.
- Or ask the reader to check Account → Preferences → Email Notifications → Renewal Reminders on the Reader Portal.
-
Verify that email/SMTP is configured and working:
- Check Settings → Email Settings in Admin Console.
-
If notifications are not being delivered, check:
- The reader's email preferences (they may have opted out)
- Spam/junk folder
- Email delivery logs
- Whether the automated task/cron job is running (contact DevOps)
Current Status: Automated renewal and expiry notifications are implemented. The timing and frequency of these reminders depends on the cron/scheduled task configuration managed by your DevOps team.
5.15 Account Deletion, GDPR Export, and Anonymization

GDPR Data Export (Admin Console)
- Open the reader's profile in Readers → Directory → [Reader].
- Scroll to the GDPR Actions section.
- Click "Export Data" (with download icon).
- A JSON file downloads named
hyphen-data-export-{readerId}.json. - The file includes: profile, subscriptions, bookmarks, comments, and reading history.
GDPR Data Export (Reader Self-Service)
- Reader navigates to Account → Preferences on the Reader Portal.
- Scrolls to the Data Privacy section.
- Clicks "Download My Data".
- A JSON file downloads named
my-hyphen-data-{DATE}.json.
Account Anonymization (Admin Console)
This permanently removes all personal information from a reader's account. This action cannot be undone.
- Open the reader's profile in Readers → Directory → [Reader].
- Scroll to the GDPR Actions section.
- Click "Anonymize" (warning/error styled button).
- A confirmation dialog appears listing what will be deleted:
- Hash the email address
- Remove name, phone, profile details
- Delete OAuth linked accounts and sessions
- Remove bookmarks and institutional access
- Anonymize comment author information
- Confirm the action.
- The reader's account is anonymized. Their email becomes
anon-{hash}@deleted.hyphen.co. - If the account was already anonymized, the button shows "Already Anonymized".
Account Deletion (Reader Self-Service via Reader Portal)
- Reader navigates to Account → Profile on the Reader Portal.
- Scrolls to the Danger Zone section.
- Clicks "Delete Account" (red-bordered button).
- A confirmation dialog appears: "This action is irreversible. All your data, subscriptions, bookmarks, and reading history will be permanently removed."
- They must enter their current password to confirm their identity.
- They must type DELETE in the text field to confirm.
- Click "Permanently Delete" (button is disabled until both password and "DELETE" are entered).
- The account is deleted, the reader is signed out, and redirected to the homepage.
Deleting a Reader from Admin Console
- In the Reader Directory, click the Delete button on a reader row.
- A confirmation modal appears: "This action will anonymize the reader's data. This cannot be undone."
- Click "Delete Reader" to confirm.
- The reader's data is anonymized (same as the anonymization process above).
5.16 Reader Moderation (Ban, Unban, Comments)
Banning a Reader
- Navigate to the reader's profile in Readers → Directory → [Reader].
- Click "Ban Reader" in the action buttons.
- A modal appears asking for a Ban Reason (text input).
- Enter the reason and click "Ban Reader".
- The reader's status changes to Banned and they see a ban notice on their profile.
Or from the Moderation page:
- Navigate to Readers → Moderation → Users tab.
- Find the user and click their profile.
- Click "Ban" and specify ban type (temporary or permanent) and reason.
Unbanning a Reader
- Open the banned reader's profile.
- Click "Unban" in the action buttons.
- The reader's status returns to Active.
Comment Moderation
- Navigate to Readers → Moderation.
- The moderation dashboard shows stats: Pending Comments, New Reports, Approved Today, Banned Users.
- Use the tabs:
- Comments tab — review, approve, reject, edit, or delete comments (with bulk actions)
- Reports tab — review reader reports, resolve or dismiss
- Users tab — view user moderation records, warnings, ban status, toggle trusted status
- Settings tab — configure profanity filters, auto-moderation rules, thresholds
5.17 Permissions and RBAC for Admin Users
Different admin roles need different permissions to manage readers. Here are the key permissions:
| Permission | What It Allows |
|---|---|
READERS_DASHBOARD_READ | View the Readers Overview dashboard |
USERS_READ | View the Reader Directory and reader profiles |
USERS_UPDATE | Ban/unban readers, update reader profiles |
USERS_EXPORT | Export reader directory data and GDPR exports |
SUBSCRIPTIONS_READ | View subscription plans and subscriber lists |
SUBSCRIPTIONS_CREATE | Grant complimentary subscriptions, process bulk requests |
SUBSCRIPTIONS_UPDATE | Edit subscriptions, update bulk requests, manage gift status |
SUBSCRIPTIONS_MANAGE_PLANS | Create, edit, and delete subscription plans |
INSTITUTIONS_READ | View institutional subscriptions |
MODERATION_READ | View the Moderation section (comments, reports, users) |
MODERATION_UPDATE | Moderate comments and reports, ban/warn users |
SETTINGS_READ | View session and moderation settings |
SETTINGS_UPDATE | Update session settings and moderation rules |
ADMIN_USERS_READ | View admin team management (Team Management link in Reader Directory) |
Tip: If you click a button or try to access a page and nothing happens or you see a blank page, check with your administrator that your role has the required permissions listed above.
5.18 Future Readers Program
The Future Readers Program offers discounted or free subscriptions to students.
Accessing the Program
- Navigate to Readers → Future Readers in the Admin Console sidebar.
- You'll see the program dashboard with:
- Stats: Total Enrollments, Pending Review, Approved, Active Institutes
- Quick Links: Institutes, Enrollments, Campaigns & Events
Two Routes for Students
| Route | How It Works |
|---|---|
| Competition Route | Students submit essays or poems. Winners receive a 100% discount (free subscription) |
| Discount Route | Students verify their student ID and receive a 50% discount on subscriptions |
Managing Enrollments
- Click "Review Enrollments" from the dashboard.
- Review student enrollment applications.
- Approve or reject entries.
- Approved students receive discount coupons they can use during checkout.
Managing Institutes
- Click "Manage Institutes" from the dashboard.
- Add or manage schools, colleges, and universities participating in the program.
Linked Campaigns
- The dashboard shows campaigns and events linked to the program.
- Each campaign shows: name, status (Draft/Active/Paused/Completed/Archived), institute count, submission count, and pending count.
6. How to Verify It Worked
After setting up or making changes, use these checks to verify everything is working correctly.
Reader Registration Verification
| Check | How to Verify |
|---|---|
| Registration works | Visit Reader Portal → Register → Complete the flow → Confirm the reader appears in Admin Console → Reader Directory |
| OTP delivery | Register with a test email → Confirm OTP arrives within 1-2 minutes |
| Social login works | Click "Sign in with Google" → Complete OAuth flow → Confirm login succeeds |
| Reader appears in directory | Admin Console → Readers → Directory → Search for the new reader |
| Correct tier assigned | New free reader should show Tier: Free or Registered |
Subscription Verification
| Check | How to Verify |
|---|---|
| Plans visible to readers | Reader Portal → Pricing page → Confirm active plans appear |
| Complimentary grant works | Admin Console → Grant subscription → Reader Portal → Account → Subscription → Confirm plan shows as "Complimentary" |
| Subscription benefits work | Log in as subscriber → Try accessing a subscriber-only article → Should have full access |
| Payment works | Reader Portal → Select plan → Complete payment → Confirm subscription is Active |
| Cancellation works | Reader Portal → Account → Subscription → Cancel → Confirm "Cancels on [date]" message |
| Gift activation works | Send a gift → Recipient activates → Confirm their subscription shows as "Gift" type |
Reader Portal Verification
| Check | How to Verify |
|---|---|
| Profile page loads | Log in → Account → Profile → All fields display correctly |
| Bookmarks work | Bookmark an article → Account → Bookmarks → Confirm it appears → Remove → Confirm it disappears |
| Reading history tracks | Read an article → Account → Reading History → Confirm it appears with progress |
| Notifications display | Trigger a notification → Account → Notifications → Confirm it appears with unread indicator |
| Sessions show correctly | Log in on two devices → Account → Sessions → Confirm both sessions appear |
| Preferences save | Change topic selections and email preferences → Save → Refresh → Confirm selections are retained |
| Data download works | Account → Preferences → Download My Data → Confirm JSON file downloads |
| Account deletion works | Account → Profile → Danger Zone → Delete Account → Enter password → Type DELETE → Confirm signout and redirect |
Admin Console Verification
| Check | How to Verify |
|---|---|
| Reader directory loads | Readers → Directory → Confirm reader list displays |
| Filters work | Apply status/tier/subscription filters → Confirm list updates |
| Profile page loads | Click a reader → Confirm all sections load (summary, profile, subscription, devices, GDPR) |
| GDPR export works | Reader profile → GDPR Actions → Export Data → Confirm JSON downloads |
| Anonymize works | Reader profile → GDPR Actions → Anonymize → Confirm data is removed |
| Session revoke works | Reader profile → Devices → Revoke → Confirm session is removed |
7. Worked Examples
7.1 Example 1: Registering a New Reader and Verifying Account Access
Scenario: A new reader wants to sign up for Hyphen and start reading articles.
Steps:
-
Reader visits the Reader Portal and clicks "Don't have an account?" on the login page.
-
Reader fills in the registration form:
- Full name: "Priya Sharma"
- Email: "priya.sharma@example.com"
- Newsletter checkbox: left checked (default)
- Terms of Service: checked
- Clicks "Create Account"
-
Reader checks email and finds a message with a 6-digit OTP (e.g., 482915).
-
Reader enters the OTP on the verification screen and clicks "Verify & Sign In".
-
Reader is now logged in and redirected to the Reader Portal homepage.
-
Admin verifies in Admin Console:
- Navigate to Readers → Directory
- Search for "priya.sharma@example.com"
- Confirm the reader appears with:
- Status: Active
- Tier: Free (or Registered)
- Joined Date: Today's date
-
Reader tests account features:
- Navigates to Account → Profile — sees their name and email
- Tries to read a free article — succeeds
- Tries to read a subscriber-only article — sees paywall/limitation
- Bookmarks a free article — confirms it appears in Account → Bookmarks
Result: Reader "Priya Sharma" has a working free account. She can read free content, save bookmarks, and comment on articles. She cannot access subscriber-only content until she subscribes.
7.2 Example 2: Assigning a Complimentary Subscription and Checking Reader Portal
Scenario: The editorial team wants to give complimentary access to a contributing author, Rahul Mehta, who already has a free reader account.
Steps:
-
Admin logs into Admin Console and navigates to Readers → Directory.
-
Admin searches for the reader: Types "Rahul Mehta" or his email in the search bar.
-
Admin opens the reader's profile: Clicks the View (→) button.
-
Admin confirms the reader has no active subscription:
- The Subscription card shows no active plan
- The "Grant Subscription" button is visible in the action buttons
-
Admin clicks "Grant Subscription" and fills in:
- Subscription Plan: selects "Annual Digital" from the dropdown
- Duration: selects "1 Year"
- Reason: types "Contributing author — complimentary access"
- Clicks "Grant Subscription"
-
Admin verifies the change:
- The Subscription card now shows:
- Plan: Annual Digital
- Status: Complimentary (badge)
- Start date: today
- End date: one year from today
- The Tier badge changes to Subscriber
- The Subscription card now shows:
-
Verification on Reader Portal (as Rahul):
- Rahul logs into the Reader Portal
- Navigates to Account → Subscription
- Sees: Plan name, status ACTIVE, subscription type Complimentary, and period dates
- Sees the Your Benefits section with checkmarks for included features
- Tries reading a subscriber-only article — has full access
- The Manage Subscription section shows options (but cancellation would be unusual for a complimentary grant)
Result: Rahul now has full subscriber access for one year at no cost. The Admin Console shows the subscription was granted with the reason documented. This can be verified end-to-end in the Reader Portal.
7.3 Example 3: Troubleshooting Why a Reader Is Not Receiving Renewal Reminders
Scenario: A subscriber, Anita Desai, contacts customer support saying she was not notified before her subscription expired. Support needs to investigate.
Steps:
-
Support agent logs into Admin Console and navigates to Readers → Directory.
-
Search for the reader: Types "anita.desai@example.com" in the search bar.
-
Open the reader's profile and check the following:
-
Check 1 — Subscription status:
- Look at the Subscription card
- Note the subscription status (Expired? Cancelled? Active?)
- Note the current period end date — when did it expire?
- Note the subscription type — if it's Complimentary, renewal reminders may not apply
-
Check 2 — Reader's email preferences:
- The reader's notification preferences indicate what emails they've opted into
- Ask Anita to check Account → Preferences → Email Notifications on the Reader Portal
- Specifically check: is "Renewal Reminders" enabled?
- If it's disabled, that's why she didn't receive a reminder — she opted out
-
Check 3 — Email delivery:
- If renewal reminders were enabled, the issue may be email delivery
- Ask Anita to check her spam/junk folder for emails from Hyphen
- Check with DevOps if the email/SMTP service is working correctly
- Check email delivery logs if available
-
Check 4 — Automated task status:
- Renewal reminder emails are sent by automated tasks (cron jobs)
- If the automated task is not running, no reminders are sent to anyone
- Contact your DevOps team to confirm the renewal reminder cron job is active and running on schedule
-
Resolution:
- If the reader had renewal reminders disabled: Explain to Anita and help her enable it for the future
- If email delivery failed: Investigate the delivery issue with DevOps
- If the cron job was not running: Escalate to DevOps to restart it, and consider granting Anita a short extension as goodwill
- If the subscription type doesn't trigger reminders: Explain the expected behavior
-
Follow-up:
- If appropriate, grant a short complimentary extension to Anita while she renews
- Confirm that renewal reminder settings are correct for future cycles
- Ensure Anita's new subscription (once renewed) has the correct billing period and reminder setup
Result: The support agent has a clear checklist to diagnose why renewal reminders were not received. The root cause is identified and resolved, and the reader is helped back to an active subscription.
7.4 Example 4: Revoking a Reader Session and Verifying Account Security
Scenario: A reader, Vikram Singh, contacts support saying his account may have been compromised. He's seeing articles marked as read that he didn't read, and he wants to secure his account.
Steps:
-
Support agent logs into Admin Console and navigates to Readers → Directory.
-
Search for "Vikram Singh" and open his profile.
-
Check the Devices section:
- Scroll down to see all active sessions
- Look for any unfamiliar devices or locations
- Note the device names (e.g., "Chrome on Windows", "Safari on iPhone"), IP addresses, and last active timestamps
- If there's a session from an unfamiliar device or IP, this may be the compromised session
-
Revoke suspicious sessions:
- Click "Revoke" next to each unfamiliar device session
- The session is immediately terminated — the person using that session is logged out
-
Reset the reader's password:
- Click the "Reset Password" button in the action buttons at the top
- A password reset email is sent to Vikram's email address
- Tell Vikram to check his email and set a new, strong password
-
Verify from the Reader Portal (as Vikram):
- Vikram logs in with his new password
- Navigates to Account → Sessions
- Confirms only his current session is listed (marked as "This device")
- The suspicious session should no longer appear
-
Additional security steps (if needed):
- If the compromise is severe, consider temporarily banning the account while investigating
- Check if there are any unauthorized changes to Vikram's profile (name, email, bio)
- Check if any suspicious comments were posted from his account
- Review the reading history for unusual activity
-
Inform the reader:
- Tell Vikram that the suspicious sessions have been revoked
- Confirm his password has been reset
- Advise him to:
- Not reuse passwords across sites
- Enable "Require Re-authentication for Sensitive Actions" if available
- Check his sessions periodically from Account → Sessions
Optional — Admin adjusts security settings:
- Navigate to Settings → Sessions
- Consider reducing the Inactivity Timeout (e.g., from 60 to 30 minutes)
- Consider reducing Maximum Concurrent Devices (e.g., from 5 to 3)
- Enable "Require Re-authentication for Sensitive Actions"
Result: The compromised session is revoked, the password is reset, and Vikram's account is secured. The admin has also reviewed security settings to prevent future incidents.
7.5 Example 5: Handling a GDPR Export and Anonymization Request
Scenario: A reader, Maria Fischer, sends an email to support requesting a copy of all her personal data (GDPR Right of Access) and then asks for her account to be permanently deleted (GDPR Right to Erasure).
Steps:
Part A — Data Export:
-
Support agent logs into Admin Console and navigates to Readers → Directory.
-
Search for "maria.fischer@example.com" and open her profile.
-
Export her data:
- Scroll to the GDPR Actions section
- Click "Export Data" (with download icon)
- A JSON file downloads:
hyphen-data-export-{readerId}.json - The file contains: profile information, subscription details, bookmarks, comments, and reading history
-
Send the data to Maria:
- Review the exported file to ensure it contains all expected data
- Send it to Maria's email as requested (following your organization's data handling procedures)
-
Alternative — Reader self-service:
- Maria can also download her own data from the Reader Portal
- Navigate to Account → Preferences → Data Privacy → "Download My Data"
- A file named
my-hyphen-data-{DATE}.jsondownloads
Part B — Account Anonymization:
-
Confirm the request is legitimate:
- Verify the request came from Maria (check the email address matches)
- Follow your organization's GDPR request verification procedure
-
Anonymize the account:
- On Maria's profile page, scroll to GDPR Actions
- Click "Anonymize" (warning-styled button)
- A confirmation dialog appears listing everything that will happen:
- Hash the email address
- Remove name, phone, profile details
- Delete OAuth linked accounts and sessions
- Remove bookmarks and institutional access
- Anonymize comment author information
- Read the list carefully and click "Confirm"
-
Verify anonymization:
- The page reloads
- The reader's email now shows as
anon-{hash}@deleted.hyphen.co - Name, bio, location, website, and phone are blank
- All sessions are revoked
- Bookmarks are removed
- Comments still exist but show an anonymized author
- The "Anonymize" button now shows "Already Anonymized"
-
Confirm to Maria:
- Email Maria confirming that:
- Her data export was provided (Part A)
- Her account has been permanently anonymized
- She can no longer log in with her old credentials
- Her comments remain on the platform but are no longer linked to her identity
- Note: Maria could also delete her own account from Account → Profile → Danger Zone → Delete Account by entering her password and typing "DELETE" in the confirmation field
- Email Maria confirming that:
Alternative — Reader self-service deletion:
- Maria can navigate to Account → Profile → Danger Zone
- Click "Delete Account"
- Read the warning: "This action is irreversible. All your data, subscriptions, bookmarks, and reading history will be permanently removed."
- Enter her current password for identity verification
- Type DELETE in the confirmation field
- Click "Permanently Delete"
- She is signed out and redirected to the homepage
Result: Maria's GDPR request is fully handled. Her data was exported and provided to her, and her account is permanently anonymized. All personal information has been removed while preserving anonymized comment content for editorial integrity.
8. Common Mistakes and How to Fix Them
| Mistake | What Happens | How to Fix |
|---|---|---|
| No subscription plans created | Readers cannot subscribe — the pricing page is empty and "Grant Subscription" dropdown has no options | Navigate to Readers → Subscriptions → Click "Add Plan" → Create at least one active plan |
| Payment gateway not configured | Readers see plans but cannot complete checkout — payment fails or no checkout option appears | Contact DevOps to configure Razorpay/Stripe credentials in Settings → Payment Settings |
| Email/SMTP not working | OTP emails not delivered — readers cannot register or log in with OTP; password reset links not sent; no notification emails | Check Settings → Email Settings and contact DevOps to fix SMTP configuration |
| Granting subscription to a reader who already has one | The "Grant Subscription" button doesn't appear | The reader already has an active subscription. Cancel or extend the existing one instead |
| Trying to grant subscription to institutional reader | The "Grant Subscription" button doesn't appear | Institutional readers get access through their institution, not individual grants |
| Reader says they can't log in after ban | Reader is banned and cannot access the platform | If the ban was a mistake, find the reader in Admin Console → Click "Unban" |
| Reader's session was revoked but they're still logged in | Session tokens may be cached temporarily | The reader needs to refresh the page or close and reopen the browser. Session will expire within minutes |
| Anonymization was done accidentally | All personal data is permanently removed | This cannot be undone. The reader will need to create a new account. Always double-check before confirming anonymization |
| Gift subscription shows as EXPIRED | Recipient didn't activate the gift before expiration | Create a new gift subscription or grant a complimentary subscription directly to the reader |
| Reader is not receiving notifications | Notifications are not showing in the Reader Portal or email | Check the reader's email preferences (they may have opted out). Check if the notification type is enabled. Check email delivery if email notifications are expected |
| Plan shows 0 subscribers after creating | No readers have subscribed to the new plan yet | Wait for readers to subscribe, or grant complimentary subscriptions for testing |
| Bulk subscription processing shows errors | Some email addresses in the paste list had issues | Check for typos, duplicates, or emails that already have subscriptions. Review the error count for details |
| "Allow Gift" not enabled on a plan | Readers cannot purchase that plan as a gift | Edit the plan in Plan Editor → Toggle "Allow Gift" on → Save |
| Reader cannot download their data | The export button fails or downloads empty data | This could be a browser issue. Try a different browser or clear the cache. If the issue persists, export from the Admin Console instead |
| Filters showing no results | Applied filters are too restrictive | Click "Clear Filters" to reset and try fewer filters. Check that you're searching with the correct values |
- Register a new reader with email/OTP — verify account is created
- Register with Google OAuth — verify account is created and linked
- Register with Facebook OAuth — verify account is created and linked
- Attempt registration without accepting Terms of Service — verify form is blocked
- Login with OTP — verify 6-digit code is delivered and accepted
- Login with password (if set) — verify login succeeds
- Forgot password flow — verify reset email is sent and new password works
- Reset password with expired link — verify "Invalid Reset Link" message
- Verify new reader appears in Admin Console → Reader Directory
- Verify correct tier is assigned (Free/Registered)
- Verify "Resend OTP" works after 60-second cooldown
- Verify OTP rejects invalid codes (wrong digits, expired)
- Create a Digital Only plan — verify it appears in the plan list
- Create a Print+Digital plan — verify it appears with print options
- Edit a plan's pricing — verify changes are saved
- Deactivate a plan — verify it disappears from the public pricing page
- Reactivate a plan — verify it reappears on the pricing page
- Preview pricing page — verify plans display correctly for readers
- Enable "Allow Gift" on a plan — verify gift checkout works
- Set plan features — verify features display in Reader Portal subscription page
- Grant complimentary subscription — verify reader becomes Subscriber
- Verify complimentary reader can access subscriber-only content
- Extend a subscription — verify end date updates
- Cancel a subscription (admin) — verify reader retains access until period end
- Cancel a subscription (reader self-service) — verify "Cancels on [date]" message
- Verify cancelled reader loses access after period end
- Verify subscription status badges display correctly (Active, Complimentary, Past Due, Cancelled, Expired)
- View gift subscriptions list — verify filtering by status works
- View gift detail — verify buyer, recipient, plan, timeline are displayed
- Change gift status (Admin action) — verify status updates
- Verify gift activation creates a subscription for the recipient
- Create an institution — verify it appears in the institutions list
- Add users to an institution — verify invitation emails are sent
- Activate institutional account (new reader) — verify password creation and access
- Activate institutional account (existing reader) — verify account linking
- Verify institutional reader can access subscriber-only content
- Renew an institution — verify dates and seats update
- View bulk requests — verify list and filtering work
- Edit a bulk request status — verify status updates
- Process an approved bulk request with email list — verify subscriptions are created
- Verify skipped/errored counts are reported correctly
- Profile page loads with correct data
- Edit profile (name, bio, location, website) — verify changes save
- Subscription page shows correct plan, status, and benefits
- Subscription page shows payment history
- Bookmarks page shows saved articles
- Add and remove a bookmark — verify updates
- Reading history tracks article progress
- Reading history shows "Continue" button for partially read articles
- Notifications page shows in-app notifications
- Mark notifications as read — verify unread count updates
- Sessions page shows current and other device sessions
- Sessions shows "This device" badge on current session
- Preferences — select/deselect content topics — verify save
- Preferences — toggle email notifications — verify save
- Preferences — change font size and theme — verify save
- Preferences — download data — verify JSON file downloads
- Revoke a session from Admin Console — verify device is signed out
- Revoke a session from Reader Portal — verify device is signed out
- Configure session timeout — verify readers are logged out after timeout
- Configure device limit — verify excess sessions are handled
- Verify "Remember Me" duration works as configured
- Verify current session cannot be revoked (must use logout instead)
- Verify welcome notification is created on registration
- Verify renewal reminder is sent before subscription expiry
- Verify new issue notification is sent when an issue is published
- Verify content notification matches reader's topic preferences
- Verify comment reply notification is sent when a reply is posted
- Verify email unsubscribe link works from received emails
- Verify reader can toggle each email preference type
- Export reader data from Admin Console — verify JSON file includes all data
- Export reader data from Reader Portal (self-service) — verify JSON file downloads
- Anonymize a reader from Admin Console — verify all PII is removed
- Delete account from Reader Portal (self-service) — verify password is required, reader is signed out and data is removed
- Verify anonymized reader's email shows as
anon-{hash}@deleted.hyphen.co - Verify anonymized reader's comments still exist but with anonymized author
- Verify "Already Anonymized" state prevents re-anonymization
- Verify anonymized reader cannot log in
- Ban a reader — verify they cannot access the platform
- Unban a reader — verify they can access the platform again
- Verify ban reason is recorded and displayed
- Review, approve, reject comments from Moderation page
- Resolve and dismiss reports from Moderation page
- Toggle trusted user status — verify effect on auto-moderation
- Admin without
USERS_READcannot access Reader Directory - Admin without
SUBSCRIPTIONS_CREATEcannot grant subscriptions - Admin without
SUBSCRIPTIONS_MANAGE_PLANScannot create/edit plans - Admin without
USERS_EXPORTcannot export data - Admin without
MODERATION_READcannot access Moderation page - Admin without
SETTINGS_UPDATEcannot change session settings
| Limitation | Details | Workaround |
|---|---|---|
| Cron job visibility | Automated tasks (renewal reminders, expiry notices, session cleanup) are managed at the infrastructure level. There is no Admin Console UI to view or manage cron jobs. | Contact your DevOps team to verify cron jobs are running and configured correctly |
| No in-app subscription upgrade flow | Readers cannot directly upgrade from one plan to another within the Reader Portal. The "Change Plan" button navigates to the pricing page. | Reader must cancel their current subscription and subscribe to the new plan, or an admin can grant a new subscription |
| No partial refund UI | There is no self-service refund option for readers. Refund processing is handled through payment gateway admin panels. | Process refunds through the Razorpay/Stripe dashboard directly |
| Password login limited | The primary login flow uses OTP. Password-based login is only available if the reader has explicitly set a password through the reset flow. | Readers should use OTP or social login for the simplest experience |
| Gift subscription — no self-service purchase UI in Admin | Gift subscriptions are purchased by readers through the Reader Portal. Admins can view and manage gift status but cannot create gifts from the Admin Console. | To give a gift-like subscription from the admin side, use the "Grant Subscription" (complimentary) feature instead |
| Bulk subscription processing — no email validation | When pasting email addresses for bulk processing, the system does not preview which emails are valid before processing. | Double-check your email list for typos and duplicates before pasting. Review the created/skipped/errored counts after processing |
| Push notifications — browser support | Push notifications require browser support and reader opt-in. Not all browsers support web push. | Ensure email notifications are also enabled as a fallback |
| Magazine schedule — manual entry | Magazine schedule entries must be added manually. There is no automatic schedule generation. | Plan your print schedule in advance and add entries for the full year |
| No reading history clear-all option | Readers can only remove individual reading history entries, not clear all at once. | Remove entries one at a time, or delete and recreate the account |
| Institutional invitation expiry | Institutional invitations have an expiration period. If a reader doesn't activate before expiry, a new invitation must be sent. | Resend the invitation from the institution's user management page |
| Data export format | GDPR exports are in JSON format only. There is no CSV or PDF export option. | Use the JSON file directly, or convert it to the desired format using a tool like an online JSON-to-CSV converter |
This guide covers the Hyphen Reader Management System as implemented on 2026-03-16. For questions or issues not covered here, contact support@hyphen.co.