Changelog

Project history.

Every build, in the order it shipped — what was added, what broke, and what was fixed.

Build 23

Watermark now names the site, with a DMCA note to match

  • AddedWatermarked certificate previews now also stamp wocerts.link alongside the viewer's name/label and timestamp, so a copy can be identified as coming from Wall of Certificates even after it's been screenshotted or reposted elsewhere.
  • AddedAdded a section to the DMCA page explaining the watermark's domain stamp and how to report a watermarked certificate found posted elsewhere without permission.
  • AddedAdded a short explanation next to the "Allow downloads" toggle on the certificate edit page, about what turning it off actually does.
Build 22

Watermark shows when a link was created, and avatars/thumbnails never go stale

  • BugThe watermark's timestamp showed whenever a viewer happened to open the link, not when the owner actually created it — so a friend viewing late at night could see a time on "the next day."
  • FixedThe watermark now shows the moment the share link was created, converted into whichever timezone the person looking at it is actually in.
  • BugAfter changing your profile photo, or after a certificate's preview finished regenerating, people who'd already loaded the page could keep seeing the old photo or preview for up to an hour.
  • FixedProfile photos and certificate previews now always reflect the latest version, while still loading instantly when nothing's actually changed.
Build 21

Responsive pass across the whole site

  • FixedThe upload and edit forms' Issuer/Year fields and Visibility picker no longer look cramped on a phone — they stack into a single column below tablet width.
  • AddedThe dashboard header shows shorter button labels on a phone ("Upload" instead of "Upload certificate", etc.) so it doesn't wrap across several lines.
  • FixedTightened side padding on narrow screens across every page for a bit more breathing room.
  • FixedA handful of header rows (homepage, certificate view's related sections, changelog, status) could have overflowed on a very narrow phone — they now wrap properly instead.
Build 20

12-hour timestamps, clearer link errors, and a real admin role

  • FixedThe watermark timestamp now shows as 08:25 PM instead of 20:25.
  • AddedOpening a share link that's been revoked or has expired now says so plainly, instead of a generic "not found."
  • AddedAn invalid certificate link now says "that certificate link is invalid" instead of a generic wall-not-found message.
  • AddedThe admin report queue is no longer controlled by a hidden password in the server's configuration. The first account ever registered on this app automatically becomes the admin, and only that account gets a special "you're the admin" verification email.
  • FixedSigning in as any other account and trying to visit the admin queue now shows a proper "not for you" page instead of nothing happening.
Build 19

Watermark now shows your label and your timezone

  • BugThe watermark stamped on a shared certificate always showed the reason (Public/Friends & Family/Other), ignoring any custom label (e.g. "For LinkedIn") you'd set on that link.
  • FixedThe watermark now shows your label when you set one, falling back to the reason only when there isn't one — matching the share list.
  • BugThe watermark's timestamp showed as 2026-07-29 15:25 UTC — year-first, and always UTC no matter who was looking at it.
  • FixedThe timestamp now reads day-month-year (29-07-2026), and shows in whoever's actually viewing the link's own local time and timezone — someone in Pakistan sees Pakistan time, someone in New York sees New York time, all from the same underlying moment stored in UTC.
Build 18

wocerts.link gets its own site

  • Addedwocerts.link now shows a real homepage explaining what it is and why it exists, instead of the same homepage as the main app.
  • AddedAdded a "Verify a link" tool — paste any wocerts.link address to check if it's active, revoked, or expired, without revealing which certificate it points to.
  • AddedAdded a live stats page for wocerts.link: total links created, active vs. revoked vs. expired, total views, and a breakdown of active links by the certificate's visibility (public/unlisted/private).
  • AddedAdded dedicated Privacy, Terms, and DMCA pages for the wocerts.link domain specifically, separate from the main app's.
  • AddedShare links now count views, shown both on the new stats page and available for a future per-link view count.
Build 17

Share link display fixes

  • BugA custom label on a share link (e.g. "For LinkedIn") wasn't showing up in the share list — only the reason (Public/Friends & Family/Other) was.
  • FixedA share link's label, if you set one, now shows as the main text, with the reason next to it in parentheses.
  • BugDates on share links showed as 2026-07-29 (year-month-day) instead of a day-first format.
  • FixedDates now show as day-month-year, e.g. 29-07-2026.
  • BugIf the app's domain (or the sharing domain) was ever entered with a trailing slash, links in emails and share pages would show a double slash.
  • FixedDomain values are now cleaned up automatically, so a trailing slash in configuration can no longer produce a double slash in any link.
Build 16

Sharing a certificate found a missing Report button, and a branding cleanup

  • BugOpening a shared certificate link (wocerts.link/...) had no way to report it — the Report button only existed on the direct certificate page, not the one an actual recipient of a share link sees.
  • FixedAdded a Report link to the shared-certificate view, so anyone receiving a share link can flag it too.
  • FixedThe site's own name is now consistently "Wall of Certificates" everywhere it refers to itself — page titles, legal pages, emails, and every "back to home" link. "WoCerts" is reserved for the short link domain (wocerts.link) only.
  • AddedContact address across the Contact, DMCA, Privacy, Terms, and Content Policy pages is now contact@wocerts.link.
  • BugThe signup page's "wocerts.link/username" preview was a hardcoded string that wouldn't have followed a real domain change.
  • FixedSignup page now reads the sharing domain from configuration instead of a hardcoded string.
Build 15

Legal pages, settings, reporting, and domain roles

  • AddedAdded Privacy Policy, Terms & Conditions, DMCA, and Contact Us pages, linked from the homepage footer.
  • Addedwallofcertificates.com (and the vercel.app staging domain) is now the main app; wocerts.link is used only for share links, so the two never mix.
  • AddedAdded a Settings page — change your display name, username, bio, and profile photo; pick a theme and layout; delete your account.
  • AddedChanging your username now frees the old one for 90 days before anyone (including you) can take it again, so it can't be reused to impersonate you.
  • AddedAdded a Report button on every certificate page, so a visitor can flag one they think shouldn't be there.
  • AddedA certificate is now automatically held from public view if it collects 3+ reports within a day, pending review — never deleted outright.
  • AddedAdded a private report queue for the site operator to review flagged certificates and restore or confirm the hold.
Build 14

Short, customizable share links

  • BugShare links were long, random addresses under /api/shares/... instead of something short enough to actually send to someone.
  • FixedShare links are now short addresses like wocerts.link/my-certification, shown as a proper page instead of a bare image.
  • AddedOwners can now choose their own link name instead of a random one, or leave it blank for a short random one.
  • AddedOwners can now set a share link to expire after a day, a week, a month, or never.
  • AddedAdded a navigation bar with Sign in / Sign up to the top of the homepage.
Build 13

Password reset, easier navigation, and error pages

  • AddedAdded "Forgot password?" — request a reset link by email, then choose a new password.
  • AddedThe homepage footer now shows both Sign in and Sign up when logged out.
  • AddedAdded a link back to the homepage from the dashboard.
  • AddedAdded proper 403 and 500 error pages, matching the rest of the site's design.
Build 12

Branding refresh and a share-link fix

  • FixedAn owner opening their own certificate through a share link now always sees the real file, not a watermarked copy of their own certificate.
  • AddedVerification emails now use a proper template matching the site's look, and show as coming from "WoCerts" instead of a raw email address.
  • FixedRenamed the site's internal short name from "WoC" to "WoCerts" for consistency.
Build 11

Domain, security review, and real email delivery

  • BugThe auto-detected certificate title was still occasionally wrong for real-world certificates, picking up a stray misread line instead of the actual course name.
  • FixedImproved the title detection further using a real example of the exact failure.
  • FixedReviewed file storage and database access end-to-end; tightened one spot where a certificate's internal storage reference was reaching the browser unnecessarily.
  • AddedMoved to the wocerts.link domain.
  • AddedAccount verification emails are now actually delivered (previously only logged for testing).
Build 10

Fixed garbled watermark text

  • BugThe name/timestamp stamped on shared certificate previews rendered as garbled box characters in production, though it looked correct when tested locally.
  • FixedThe watermark text now uses a font bundled with the site itself instead of depending on a font already installed on the server.
Build 9

Redesigned certificate sharing

  • BugThe original file was still reachable by editing the watermarked-preview link's address, since the two links only differed by one word.
  • FixedReplaced both links with per-purpose share links that share no pattern with each other, so there's no address to guess between.
  • AddedOwners can now create multiple share links for the same certificate, each tagged with a reason (Friends & Family, Public, Other) that's stamped into that link's watermark.
  • AddedShare links can be revoked or regenerated at any time, immediately invalidating the old link.
  • FixedRewrote this changelog to read as a public product history rather than an internal development log.
Build 8

Changelog, live status page, and preview retry

  • AddedAdded this changelog and a public status page showing live site-wide totals.
  • AddedAdded a "Retry preview" button for any certificate whose preview never generated, so it doesn't require re-uploading the file.
  • BugAuto-detected certificate title/issuer text was sometimes wrong for certain certificate layouts.
  • FixedImproved how the title and issuer are located within a certificate's text, instead of relying on simple keyword matching.
Build 7

Certificate previews now generate reliably

  • BugCertificate preview images and auto-detected text worked when tested locally, but failed for real uploaded PDFs once the site was live.
  • FixedReplaced the certificate preview renderer with one designed for the hosting environment, after tracing the failure through several distinct causes.
  • FixedCorrected how the renderer located its own support files (fonts, character maps, and its text-recognition engine) once running on the hosting platform.
  • BugOnce previews started generating, the text-recognition step for auto-filling the form still failed in the same environment.
  • FixedFixed the text-recognition engine failing to load one of its required files after deployment.
Build 6

Watermarked previews and a closed access gap

  • AddedWhen an owner turns off downloads for a certificate, other viewers now see a preview with the viewer's name and the time stamped across it, instead of the original file.
  • BugThe original file was still directly reachable even when downloads were turned off, bypassing the watermarked preview.
  • FixedThe original file is no longer served to non-owners once downloads are turned off; they're redirected to the watermarked preview instead.
Build 5

Malware scanning and faster file loading

  • AddedUploaded files are now checked by a malware-scanning service, in addition to the existing file-type and content checks every upload goes through.
  • BugViewing or downloading a certificate's original file could feel slow for larger files.
  • FixedOriginal files now stream to the browser as they load instead of loading fully into memory first.
Build 4

Public launch

  • AddedThe site is now hosted and publicly reachable, backed by managed database and file storage so uploads persist across updates to the site.
Build 3

Certificate organization

  • AddedAdded categories for organizing a wall of certificates.
  • AddedAdded the ability to edit a certificate's details after uploading.
  • AddedAdded grouping, for bundling several related certificates (e.g. courses within one program) under a single entry.
Build 2

Upload auto-fill

  • AddedUploading a certificate now auto-detects and suggests a title, issuer, and year from the file, for review before saving.
Build 1

Initial launch

  • AddedSign up, upload a certificate (PDF or image), and see it appear on a dashboard.
  • AddedEvery account gets a public link showing their certificates as a wall, with public, unlisted, and private visibility per certificate.
Wall of Certificates · A personal display tool