rebrand: Pelagia Portal → PPMS (Pelagia Payment Management System)

Rename the application to PPMS across all user-facing surfaces:
- Browser title / metadata
- Login page (with tagline: "PMS — it runs the ship.")
- Sidebar logo text
- Email header, footer, and body copy in all transactional emails
- PDF/XLSX workbook creator field
- Reports export page title and heading
- Notifier FROM display name and default email domain

Legal company name ("Pelagia Marine Services Pvt. Ltd.") on PO documents
is unchanged — that is the issuing entity, not the application brand.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Hardik 2026-05-16 21:00:15 +05:30
parent 8322f33880
commit a5fb7d088c
11 changed files with 19 additions and 18 deletions

View file

@ -43,8 +43,9 @@ export default function LoginPage() {
<Anchor className="h-5 w-5 text-white" /> <Anchor className="h-5 w-5 text-white" />
</div> </div>
<div> <div>
<h1 className="text-lg font-semibold text-neutral-900">Pelagia Portal</h1> <h1 className="text-lg font-semibold text-neutral-900">PPMS</h1>
<p className="text-xs text-neutral-500">Purchase Order Management</p> <p className="text-xs text-neutral-500">Pelagia Payment Management System</p>
<p className="text-xs text-neutral-400 italic">PMS it runs the ship.</p>
</div> </div>
</div> </div>

View file

@ -140,7 +140,7 @@ export async function GET(request: NextRequest, { params }: Props) {
if (format === "xlsx") { if (format === "xlsx") {
const wb = new ExcelJS.Workbook(); const wb = new ExcelJS.Workbook();
wb.creator = "Pelagia Portal"; wb.creator = "PPMS — Pelagia Payment Management System";
const ws = wb.addWorksheet(po.poNumber.replace(/\//g, "-"), { const ws = wb.addWorksheet(po.poNumber.replace(/\//g, "-"), {
pageSetup: { paperSize: 9, orientation: "portrait", fitToPage: true, fitToWidth: 1, fitToHeight: 0 }, pageSetup: { paperSize: 9, orientation: "portrait", fitToPage: true, fitToWidth: 1, fitToHeight: 0 },
}); });

View file

@ -60,7 +60,7 @@ export async function GET(request: NextRequest) {
<html lang="en"> <html lang="en">
<head> <head>
<meta charset="UTF-8" /> <meta charset="UTF-8" />
<title>PO Export Pelagia Portal</title> <title>PO Export PPMS</title>
<style> <style>
body { font-family: Arial, sans-serif; font-size: 11px; margin: 20px; color: #111; } body { font-family: Arial, sans-serif; font-size: 11px; margin: 20px; color: #111; }
h1 { font-size: 16px; margin-bottom: 4px; } h1 { font-size: 16px; margin-bottom: 4px; }
@ -77,7 +77,7 @@ export async function GET(request: NextRequest) {
<div class="no-print"> <div class="no-print">
<button onclick="window.print()" style="padding:6px 16px;font-size:13px;cursor:pointer;">Print / Save as PDF</button> <button onclick="window.print()" style="padding:6px 16px;font-size:13px;cursor:pointer;">Print / Save as PDF</button>
</div> </div>
<h1>Purchase Order Report Pelagia Portal</h1> <h1>Purchase Order Report PPMS</h1>
<p>Generated: ${new Date().toLocaleString("en-IN")} · ${orders.length} orders</p> <p>Generated: ${new Date().toLocaleString("en-IN")} · ${orders.length} orders</p>
<table> <table>
<thead> <thead>

View file

@ -16,10 +16,10 @@ const jetbrainsMono = JetBrains_Mono({
export const metadata: Metadata = { export const metadata: Metadata = {
title: { title: {
default: "Pelagia Portal", default: "PPMS",
template: "%s | Pelagia Portal", template: "%s | PPMS",
}, },
description: "Purchase Order Management System", description: "PPMS — Pelagia Payment Management System",
}; };
export default function RootLayout({ export default function RootLayout({

View file

@ -79,7 +79,7 @@ export function Sidebar({ userRole }: { userRole: Role }) {
<div className="flex h-8 w-8 items-center justify-center rounded-lg bg-primary-600"> <div className="flex h-8 w-8 items-center justify-center rounded-lg bg-primary-600">
<Anchor className="h-4 w-4 text-white" /> <Anchor className="h-4 w-4 text-white" />
</div> </div>
<span className="text-sm font-semibold text-neutral-900">Pelagia Portal</span> <span className="text-sm font-semibold text-neutral-900">PPMS</span>
</div> </div>
<nav className="flex-1 overflow-y-auto px-3 py-4 space-y-0.5"> <nav className="flex-1 overflow-y-auto px-3 py-4 space-y-0.5">

View file

@ -20,7 +20,7 @@ export function EditsRequestedEmail({ po, note }: Props) {
<Text style={{ margin: 0, fontStyle: "italic" }}>{note}</Text> <Text style={{ margin: 0, fontStyle: "italic" }}>{note}</Text>
</Section> </Section>
<Text style={{ fontSize: "14px", color: "#374151" }}> <Text style={{ fontSize: "14px", color: "#374151" }}>
Please log in to Pelagia Portal, make the requested edits, and resubmit the order. Please log in to PPMS, make the requested edits, and resubmit the order.
</Text> </Text>
</EmailLayout> </EmailLayout>
); );

View file

@ -29,15 +29,15 @@ export function EmailLayout({ children, previewText }: EmailLayoutProps) {
> >
<Section style={{ borderBottom: "2px solid #2563eb", paddingBottom: "12px", marginBottom: "24px" }}> <Section style={{ borderBottom: "2px solid #2563eb", paddingBottom: "12px", marginBottom: "24px" }}>
<Text style={{ fontSize: "20px", fontWeight: "700", color: "#1d4ed8", margin: 0 }}> <Text style={{ fontSize: "20px", fontWeight: "700", color: "#1d4ed8", margin: 0 }}>
Pelagia Portal PPMS
</Text> </Text>
</Section> </Section>
{children} {children}
</Section> </Section>
<Section style={{ padding: "16px 0" }}> <Section style={{ padding: "16px 0" }}>
<Text style={{ fontSize: "12px", color: "#9ca3af", textAlign: "center" }}> <Text style={{ fontSize: "12px", color: "#9ca3af", textAlign: "center" }}>
This message was sent by Pelagia Portal. You received it because you are a This message was sent by PPMS (Pelagia Payment Management System). You received it
stakeholder on this purchase order. because you are a stakeholder on this purchase order.
</Text> </Text>
</Section> </Section>
</Container> </Container>

View file

@ -22,7 +22,7 @@ export function PaymentProcessedEmail({ po }: Props) {
)} )}
</Section> </Section>
<Text style={{ fontSize: "14px", color: "#374151" }}> <Text style={{ fontSize: "14px", color: "#374151" }}>
Please confirm receipt in Pelagia Portal once you have received the goods or services. Please confirm receipt in PPMS once you have received the goods or services.
This will close the purchase order. This will close the purchase order.
</Text> </Text>
</EmailLayout> </EmailLayout>

View file

@ -30,7 +30,7 @@ export function PoSubmittedEmail({ po, submitterName }: Props) {
<Text style={{ margin: 0, fontSize: "15px", color: "#111827" }}>{submitterName}</Text> <Text style={{ margin: 0, fontSize: "15px", color: "#111827" }}>{submitterName}</Text>
</Section> </Section>
<Text style={{ fontSize: "14px", color: "#374151" }}> <Text style={{ fontSize: "14px", color: "#374151" }}>
Please log in to Pelagia Portal to review and take action on this order. Please log in to PPMS to review and take action on this order.
</Text> </Text>
</EmailLayout> </EmailLayout>
); );

View file

@ -18,7 +18,7 @@ export function VendorIdNeededEmail({ po }: Props) {
<Text style={{ margin: 0 }}>{po.title}</Text> <Text style={{ margin: 0 }}>{po.title}</Text>
</Section> </Section>
<Text style={{ fontSize: "14px", color: "#374151" }}> <Text style={{ fontSize: "14px", color: "#374151" }}>
Please log in to Pelagia Portal, update the vendor details on this order, and the manager Please log in to PPMS, update the vendor details on this order, and the manager
will be notified to continue the review. will be notified to continue the review.
</Text> </Text>
</EmailLayout> </EmailLayout>

View file

@ -4,7 +4,7 @@ import type { PurchaseOrder, User } from "@prisma/client";
const isDev = process.env.NODE_ENV === "development"; const isDev = process.env.NODE_ENV === "development";
const resend = isDev ? null : new Resend(process.env.RESEND_API_KEY); const resend = isDev ? null : new Resend(process.env.RESEND_API_KEY);
const FROM = `${process.env.EMAIL_FROM_NAME ?? "Pelagia Portal"} <${process.env.EMAIL_FROM ?? "noreply@pelagiaportal.com"}>`; const FROM = `${process.env.EMAIL_FROM_NAME ?? "PPMS"} <${process.env.EMAIL_FROM ?? "noreply@ppms.pelagiamarine.com"}>`;
export type NotificationEvent = export type NotificationEvent =
| "PO_SUBMITTED" | "PO_SUBMITTED"
@ -173,7 +173,7 @@ function buildHtml(
<html> <html>
<body style="font-family:Inter,sans-serif;max-width:560px;margin:0 auto;padding:32px 24px;color:#111827;"> <body style="font-family:Inter,sans-serif;max-width:560px;margin:0 auto;padding:32px 24px;color:#111827;">
<div style="border-bottom:2px solid #2563eb;padding-bottom:12px;margin-bottom:24px;"> <div style="border-bottom:2px solid #2563eb;padding-bottom:12px;margin-bottom:24px;">
<span style="font-size:20px;font-weight:700;color:#1d4ed8;">Pelagia Portal</span> <span style="font-size:20px;font-weight:700;color:#1d4ed8;">PPMS</span>
</div> </div>
<p style="margin:0 0 16px;">Hi ${recipient.name},</p> <p style="margin:0 0 16px;">Hi ${recipient.name},</p>
<p style="margin:0 0 24px;">${buildEmailBody(event, po, note)}</p> <p style="margin:0 0 24px;">${buildEmailBody(event, po, note)}</p>