Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
33 changes: 33 additions & 0 deletions PRODUCT.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
# Product

## Register

product

## Users

Job seekers, independent professionals, developers, designers, and founders creating career documents and public portfolios. They work inside focused editors and expect immediate visual feedback, reliable exports, optional cloud sync, and clear control over their data.

## Product Purpose

VeriWorkly is a privacy-first career workspace for building resumes, cover letters, and public portfolios. It should help users turn verified career facts into clear professional writing without obscuring what changed, consuming credits unexpectedly, or locking their source data into the service.

## Brand Personality

Precise, trustworthy, and quietly ambitious. Product copy should be direct and specific, with confidence coming from reliable behavior rather than decorative claims.

## Anti-references

Avoid surveillance-heavy resume SaaS, generic chatbot interfaces, opaque AI generation, over-decorated dashboards, and editors that hide the user's original content or make destructive changes without review.

## Design Principles

1. Keep users in the editor and close to the content they are changing.
2. Show AI cost and mode before generation, then require an explicit replace action.
3. Preserve local-first ownership and make cloud behavior understandable.
4. Reuse familiar controls and the existing VeriWorkly product language.
5. Make errors actionable without interrupting unrelated editing work.

## Accessibility & Inclusion

Target WCAG 2.1 AA. All editor actions require keyboard access, visible focus, readable contrast, non-color status cues, and reduced-motion-compatible feedback.
3 changes: 2 additions & 1 deletion apps/blog-platform/components/layout/Footer.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,8 @@ const Footer = () => {
{
title: "Platform",
links: [
{ name: "Resume Builder", href: siteConfig.links.app, external: true },
{ name: "Document Builder", href: siteConfig.links.app, external: true },
{ name: "Portfolio Builder", href: siteConfig.links.portfolio, external: true },
{
name: "Template Gallery",
href: `${siteConfig.links.main}/templates`,
Expand Down
3 changes: 2 additions & 1 deletion apps/blog-platform/config/site.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,9 @@ export const siteConfig = {

main: isDev ? "http://localhost:3000" : "https://veriworkly.com",
app: isDev ? "http://localhost:3001" : "https://app.veriworkly.com",
blog: isDev ? "http://localhost:3003" : "https://blog.veriworkly.com",
docs: isDev ? "http://localhost:3002" : "https://docs.veriworkly.com",
blog: isDev ? "http://localhost:3003" : "https://blog.veriworkly.com",
portfolio: isDev ? "http://localhost:3004" : "https://portfolio.veriworkly.com",
},

keywords: ["VeriWorkly", "blog", "career tips", "architecture"],
Expand Down
2 changes: 1 addition & 1 deletion apps/blog-platform/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@veriworkly/blog-platform",
"version": "3.18.2",
"version": "3.20.0",
"private": true,
"scripts": {
"dev": "next dev",
Expand Down
1 change: 1 addition & 0 deletions apps/docs-platform/components/layout/Footer.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ const Footer = () => {
title: "Platform",
links: [
{ name: "Resume Builder", href: siteConfig.links.app, external: true },
{ name: "Portfolio Builder", href: siteConfig.links.portfolio, external: true },
{
name: "Template Gallery",
href: `${siteConfig.links.main}/templates`,
Expand Down
1 change: 1 addition & 0 deletions apps/docs-platform/config/site.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ export const siteConfig = {
app: isDev ? "http://localhost:3001" : "https://app.veriworkly.com",
docs: isDev ? "http://localhost:3002" : "https://docs.veriworkly.com",
blog: isDev ? "http://localhost:3003" : "https://blog.veriworkly.com",
portfolio: isDev ? "http://localhost:3004" : "https://portfolio.veriworkly.com",
},

keywords: ["VeriWorkly", "documentation", "API reference"],
Expand Down
2 changes: 1 addition & 1 deletion apps/docs-platform/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@veriworkly/docs-platform",
"version": "3.18.2",
"version": "3.20.0",
"private": true,
"scripts": {
"dev": "next dev",
Expand Down
2 changes: 1 addition & 1 deletion apps/portfolio/app/not-found.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ const NotFoundPage = () => {

<div>
<div className="text-[10px] font-bold opacity-50">RELEASE</div>
<div className="text-ink mt-0.5 text-xs font-bold">Build #v3.18.2</div>
<div className="text-ink mt-0.5 text-xs font-bold">Build #v3.20.0</div>
</div>
</div>
</div>
Expand Down
34 changes: 17 additions & 17 deletions apps/portfolio/app/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ const HomePage = () => {
"@type": "AggregateOffer",
priceCurrency: "USD",
lowPrice: "0",
highPrice: "11.99",
highPrice: "14.99",
offerCount: "7",
offers: [
{
Expand All @@ -39,26 +39,26 @@ const HomePage = () => {

{
"@type": "Offer",
name: "1-Day Pass",
price: "0.69",
name: "3-Day Sprint Pass",
price: "2.99",
priceCurrency: "USD",
},

{
"@type": "Offer",
name: "7-Day Sprint",
price: "3.99",
name: "7-Day Hunt Pass",
price: "5.99",
priceCurrency: "USD",
},

{
"@type": "Offer",
name: "Full Bundle (Annual)",
price: "9.99",
name: "Job Hunter Bundle (Annual)",
price: "11.99",
priceCurrency: "USD",
priceSpecification: {
"@type": "UnitPriceSpecification",
price: "9.99",
price: "11.99",
priceCurrency: "USD",
referenceQuantity: {
"@type": "QuantitativeValue",
Expand All @@ -70,12 +70,12 @@ const HomePage = () => {

{
"@type": "Offer",
name: "Full Bundle (Monthly)",
price: "11.99",
name: "Job Hunter Bundle (Monthly)",
price: "14.99",
priceCurrency: "USD",
priceSpecification: {
"@type": "UnitPriceSpecification",
price: "11.99",
price: "14.99",
priceCurrency: "USD",
referenceQuantity: {
"@type": "QuantitativeValue",
Expand All @@ -87,12 +87,12 @@ const HomePage = () => {

{
"@type": "Offer",
name: "Portfolio Pro Only",
price: "8.99",
name: "Creator Pro (Monthly)",
price: "9.99",
priceCurrency: "USD",
priceSpecification: {
"@type": "UnitPriceSpecification",
price: "8.99",
price: "9.99",
priceCurrency: "USD",
referenceQuantity: {
"@type": "QuantitativeValue",
Expand All @@ -104,12 +104,12 @@ const HomePage = () => {

{
"@type": "Offer",
name: "AI Credits Only",
price: "4.99",
name: "AI Credits Standalone (Monthly)",
price: "5.99",
priceCurrency: "USD",
priceSpecification: {
"@type": "UnitPriceSpecification",
price: "4.99",
price: "5.99",
priceCurrency: "USD",
referenceQuantity: {
"@type": "QuantitativeValue",
Expand Down
43 changes: 26 additions & 17 deletions apps/portfolio/app/pricing/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -15,14 +15,14 @@ import BundlePricingSection from "@/components/pricing/BundlePricingSection";
export const metadata: Metadata = {
title: "Portfolio Builder Pricing",
description:
"Build a VeriWorkly portfolio for free, preview templates, and upgrade when you are ready to publish with a subdomain, SEO metadata, analytics, and hosted media.",
"Build a VeriWorkly portfolio for free, preview templates, and upgrade when you are ready to publish with a subdomain, CDN hosting, custom metadata, and no watermark.",

openGraph: {
type: "website",
url: "/pricing",
title: "Portfolio Builder Pricing | VeriWorkly Portfolio",
description:
"Build a VeriWorkly portfolio for free, preview templates, and upgrade when you are ready to publish with a subdomain, SEO metadata, analytics, and hosted media.",
"Build a VeriWorkly portfolio for free, preview templates, and upgrade when you are ready to publish with a subdomain, CDN hosting, custom metadata, and no watermark.",
images: [
{
url: "/og/pricing-page-og.png",
Expand All @@ -37,7 +37,7 @@ export const metadata: Metadata = {
card: "summary_large_image",
title: "Portfolio Builder Pricing | VeriWorkly Portfolio",
description:
"Build a VeriWorkly portfolio for free, preview templates, and upgrade when you are ready to publish with a subdomain, SEO metadata, analytics, and hosted media.",
"Build a VeriWorkly portfolio for free, preview templates, and upgrade when you are ready to publish with a subdomain, CDN hosting, custom metadata, and no watermark.",
images: ["/og/pricing-page-og.png"],
},

Expand Down Expand Up @@ -73,61 +73,69 @@ export default async function PricingPage() {
"@type": "AggregateOffer",
priceCurrency: "USD",
lowPrice: "0",
highPrice: "11.99",
offerCount: "7",
highPrice: "14.99",
offerCount: "8",
offers: [
{
"@type": "Offer",
name: "Draft",
name: "Free Plan",
price: "0",
priceCurrency: "USD",
url: `${siteConfig.links.portfolio}/pricing`,
},

{
"@type": "Offer",
name: "Day Pass",
price: "0.69",
name: "3-Day Sprint",
price: "2.99",
priceCurrency: "USD",
url: `${siteConfig.links.portfolio}/pricing`,
},

{
"@type": "Offer",
name: "Week Sprint",
price: "3.99",
name: "7-Day Hunt",
price: "5.99",
priceCurrency: "USD",
url: `${siteConfig.links.portfolio}/pricing`,
},

{
"@type": "Offer",
name: "Full Bundle (Annual)",
name: "Creator Pro (Annual)",
price: "7.99",
priceCurrency: "USD",
url: `${siteConfig.links.portfolio}/pricing`,
},

{
"@type": "Offer",
name: "Creator Pro (Monthly)",
price: "9.99",
priceCurrency: "USD",
url: `${siteConfig.links.portfolio}/pricing`,
},

{
"@type": "Offer",
name: "Full Bundle (Monthly)",
name: "Job Hunter Bundle (Annual)",
price: "11.99",
priceCurrency: "USD",
url: `${siteConfig.links.portfolio}/pricing`,
},

{
"@type": "Offer",
name: "Portfolio Pro Standalone",
price: "8.99",
name: "Job Hunter Bundle (Monthly)",
price: "14.99",
priceCurrency: "USD",
url: `${siteConfig.links.portfolio}/pricing`,
},

{
"@type": "Offer",
name: "AI Credits Standalone",
price: "4.99",
price: "5.99",
priceCurrency: "USD",
url: `${siteConfig.links.portfolio}/pricing`,
},
Expand Down Expand Up @@ -167,8 +175,9 @@ export default async function PricingPage() {

<main className="relative z-10 w-full max-w-full overflow-x-clip pt-28">
{paymentsBlocked && (
<div className="mx-auto w-[min(1160px,calc(100%-32px))] mt-8 rounded-2xl border border-warning bg-warning-soft/30 p-4 text-sm font-semibold text-warning">
Payments are disabled in production during this phase. Only system administrators can perform checkouts.
<div className="border-warning bg-warning-soft/30 text-warning mx-auto mt-8 w-[min(1160px,calc(100%-32px))] rounded-2xl border p-4 text-sm font-semibold">
Payments are disabled in production during this phase. Only system administrators can
perform checkouts.
</div>
)}
<BundlePricingSection />
Expand Down
Loading
Loading