Some checks failed
CodeQL Analysis / CodeQL (javascript-typescript) (push) Failing after 1m15s
Deploy / Build API Image (push) Failing after 20s
Deploy / Build AI Services Image (push) Failing after 12s
E2E Tests / Playwright E2E (push) Failing after 16s
Deploy / Deploy to Staging (push) Has been skipped
Deploy / Deploy to Production (push) Has been skipped
Deploy / Smoke Test Production (push) Has been skipped
Security Scanning / Trivy Scan — AI Services Image (push) Failing after 35s
Security Scanning / Trivy Filesystem Scan (push) Failing after 30s
Backup Verification / Backup Restore Verification (push) Failing after 14m37s
Security Scanning / Trivy Scan — API Image (push) Failing after 1m4s
Security Scanning / Trivy Scan — Web Image (push) Failing after 36s
Security Scanning / Dependency Audit (pnpm) (push) Failing after 11m6s
Deploy / Build Web Image (push) Failing after 12s
Deploy / Smoke Test Staging (push) Has been skipped
Deploy / Rollback Staging (push) Has been skipped
Deploy / Rollback Production (push) Has been skipped
CI / Lint → Typecheck → Test → Build (22) (push) Failing after 8s
CI / E2E Tests (push) Has been skipped
Security Scanning / Security Gate (push) Has been cancelled
Backend — DELETE endpoints (hard delete, ADMIN or owner):
- DELETE /projects/:id (Admin) — new DeleteProjectCommand/Handler,
repository.delete() adapter, module wiring.
- DELETE /industrial/parks/:id (Admin) — same pattern.
- DELETE /listings/:id (JWT + owner-or-Admin check in handler).
Frontend — API clients:
- lib/du-an-api.ts: add create/update/delete + CreateProjectPayload,
UpdateProjectPayload types.
- lib/khu-cong-nghiep-api.ts: add createPark/updatePark/deletePark +
Create/Update payload types.
- lib/listings-api.ts: add delete().
Dashboard pages — new:
- /projects (Quản lý dự án): list with filters + edit/delete actions,
/projects/new form (sectioned Cards, zod-validated), /projects/[id]/edit
with danger-zone delete.
- /industrial-parks (Quản lý KCN): same triad. Fix occupancy-rate display
(percentage already 0-100, no need to *100).
Dashboard listings page:
- Add Edit/Delete row actions with confirm + useMutation; error banner
on mutation failure. Table view gains a "Thao tác" column; list view
gains a footer action bar below each card.
Dashboard nav:
- Catalog group: /du-an → /projects (Quản lý dự án), /khu-cong-nghiep
→ /industrial-parks (Quản lý KCN). Desktop primaryNav updated too.
Public homepage:
- Add "Bất động sản" as a 5th feature card/tab → /search, using
listingsApi for the "Featured listings" section.
- Bump grid to lg:grid-cols-5, update features subtitle copy ("Năm/Five
core services").
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
301 lines
9.9 KiB
JSON
301 lines
9.9 KiB
JSON
{
|
|
"metadata": {
|
|
"title": "GoodGo — Vietnam Real Estate Platform",
|
|
"description": "GoodGo — smart real estate platform in Vietnam. Buy, sell, and rent properties easily with over 10,000+ listings nationwide.",
|
|
"ogTitle": "GoodGo — Vietnam Real Estate Platform",
|
|
"ogDescription": "Buy, sell, and rent properties easily with GoodGo — Vietnam's leading smart real estate platform."
|
|
},
|
|
"common": {
|
|
"goodgo": "GoodGo",
|
|
"loading": "Loading...",
|
|
"retry": "Retry",
|
|
"retrying": "Retrying...",
|
|
"goHome": "Go to homepage",
|
|
"search": "Search",
|
|
"login": "Login",
|
|
"register": "Register",
|
|
"logout": "Logout",
|
|
"admin": "Admin",
|
|
"dashboard": "Dashboard",
|
|
"profile": "Profile",
|
|
"errorCode": "Error code: {code}",
|
|
"retriedCount": "Retried {count} times",
|
|
"allRightsReserved": "© 2026 GoodGo. All rights reserved.",
|
|
"skipToContent": "Skip to main content"
|
|
},
|
|
"nav": {
|
|
"home": "Home",
|
|
"search": "Search",
|
|
"pricing": "Pricing",
|
|
"projects": "Projects",
|
|
"industrialParks": "Industrial Parks",
|
|
"transfer": "Transfer",
|
|
"mainNav": "Main navigation",
|
|
"dashboardNav": "Dashboard",
|
|
"adminNav": "Administration",
|
|
"openMenu": "Open menu",
|
|
"closeMenu": "Close menu"
|
|
},
|
|
"dashboard": {
|
|
"title": "Dashboard",
|
|
"listings": "Listings",
|
|
"createListing": "Create listing",
|
|
"catalogs": "Catalogs",
|
|
"manageProjects": "Manage projects",
|
|
"manageIndustrialParks": "Manage industrial parks",
|
|
"inquiries": "Inquiries",
|
|
"leads": "Leads",
|
|
"analytics": "Analytics",
|
|
"reports": "AI Reports",
|
|
"savedSearches": "Saved searches",
|
|
"aiValuation": "AI Valuation",
|
|
"profile": "Profile",
|
|
"subscription": "Subscription",
|
|
"payments": "Payments",
|
|
"darkMode": "Switch to dark mode",
|
|
"lightMode": "Switch to light mode"
|
|
},
|
|
"adminNav": {
|
|
"dashboard": "Dashboard",
|
|
"users": "User management",
|
|
"moderation": "Content moderation",
|
|
"kyc": "KYC verification",
|
|
"closeMenu": "Close menu",
|
|
"openMenu": "Open menu"
|
|
},
|
|
"landing": {
|
|
"heroTitle": "Find your perfect",
|
|
"heroTitleHighlight": "property",
|
|
"heroSubtitle": "Smart real estate platform in Vietnam — buy, sell, and rent properties with ease",
|
|
"searchPlaceholder": "Enter area, project, or keyword...",
|
|
"transactionTypeLabel": "Type",
|
|
"featuresTitle": "GoodGo solutions",
|
|
"featuresSubtitle": "Five core services for Vietnam's real estate market",
|
|
"features": {
|
|
"explore": "Explore",
|
|
"projects": {
|
|
"title": "Projects",
|
|
"description": "Discover the latest apartment, villa, and residential projects"
|
|
},
|
|
"industrial": {
|
|
"title": "Industrial parks",
|
|
"description": "Find industrial land, factories, and warehouses for rent or sale"
|
|
},
|
|
"transfer": {
|
|
"title": "Transfers",
|
|
"description": "Transfer business premises, offices, and retail spaces"
|
|
},
|
|
"valuation": {
|
|
"title": "Property valuation",
|
|
"description": "AI-powered valuation based on real market data"
|
|
},
|
|
"listings": {
|
|
"title": "Listings",
|
|
"description": "Browse for-sale and rental property listings nationwide"
|
|
}
|
|
},
|
|
"featuredTitle": "Featured listings",
|
|
"featuredSubtitle": "Explore the most popular properties",
|
|
"viewAll": "View all",
|
|
"loadError": "Unable to load listings. Please try again.",
|
|
"noFeatured": "No featured listings yet",
|
|
"statsTitle": "GoodGo in numbers",
|
|
"statsSubtitle": "Vietnam's trusted real estate platform",
|
|
"ctaTitle": "Have a property to list?",
|
|
"ctaSubtitle": "List for free today and reach thousands of potential buyers",
|
|
"registerFree": "Register for free",
|
|
"searchNow": "Search now"
|
|
},
|
|
"stats": {
|
|
"listings": "Listings",
|
|
"users": "Users",
|
|
"transactions": "Successful transactions",
|
|
"provinces": "Provinces"
|
|
},
|
|
"footer": {
|
|
"description": "Smart real estate platform in Vietnam",
|
|
"propertyTypes": "Property types",
|
|
"areas": "Areas",
|
|
"support": "Support"
|
|
},
|
|
"propertyTypes": {
|
|
"APARTMENT": "Apartment",
|
|
"HOUSE": "House",
|
|
"VILLA": "Villa",
|
|
"LAND": "Land",
|
|
"OFFICE": "Office",
|
|
"SHOPHOUSE": "Shophouse"
|
|
},
|
|
"transactionTypes": {
|
|
"SALE": "Sale",
|
|
"RENT": "Rent"
|
|
},
|
|
"notFound": {
|
|
"title": "Page not found",
|
|
"description": "The page you are looking for does not exist or has been moved."
|
|
},
|
|
"error": {
|
|
"title": "An error occurred",
|
|
"description": "Sorry, something went wrong. Please try again.",
|
|
"autoRetrying": "Automatically retrying..."
|
|
},
|
|
"language": {
|
|
"label": "Language",
|
|
"vi": "Tiếng Việt",
|
|
"en": "English"
|
|
},
|
|
"auth": {
|
|
"loginTitle": "Login",
|
|
"loginDescription": "Enter your phone number and password to log in",
|
|
"demoAccountsTitle": "Demo accounts (MVP)",
|
|
"demoAccountsHint": "Click to auto-fill. Shared password:",
|
|
"phone": "Phone number",
|
|
"phonePlaceholder": "0912345678",
|
|
"password": "Password",
|
|
"passwordPlaceholder": "Enter password",
|
|
"showPassword": "Show",
|
|
"hidePassword": "Hide",
|
|
"loginButton": "Login",
|
|
"orLoginWith": "Or login with",
|
|
"noAccount": "Don't have an account?",
|
|
"registerLink": "Register",
|
|
"dismiss": "Dismiss",
|
|
"registerTitle": "Register",
|
|
"registerDescription": "Create a new account to start using GoodGo",
|
|
"fullName": "Full name",
|
|
"fullNamePlaceholder": "John Doe",
|
|
"email": "Email",
|
|
"emailPlaceholder": "email@example.com",
|
|
"confirmPassword": "Confirm password",
|
|
"confirmPasswordPlaceholder": "Re-enter password",
|
|
"registerButton": "Register",
|
|
"hasAccount": "Already have an account?",
|
|
"loginLink": "Login",
|
|
"orRegisterWith": "Or register with",
|
|
"oauthErrors": {
|
|
"oauth_failed": "Social login failed. Please try again.",
|
|
"access_denied": "You denied access. Please try again.",
|
|
"invalid_request": "Invalid login request. Please try again.",
|
|
"server_error": "Server error. Please try again later.",
|
|
"temporarily_unavailable": "Service temporarily unavailable. Please try again later.",
|
|
"default": "An error occurred during login. Please try again."
|
|
}
|
|
},
|
|
"pricing": {
|
|
"badge": "Pricing Plans",
|
|
"title": "Choose the right plan for you",
|
|
"subtitle": "From individuals to enterprises — GoodGo has a plan for every real estate need",
|
|
"monthly": "Monthly",
|
|
"yearly": "Yearly",
|
|
"yearlyDiscount": "-17%",
|
|
"perMonth": "month",
|
|
"perYear": "year",
|
|
"loading": "Loading plans...",
|
|
"popular": "Most popular",
|
|
"unlimited": "Unlimited",
|
|
"listingsCount": "listings",
|
|
"savedSearchesCount": "saved searches",
|
|
"photosPerListing": "photos/listing",
|
|
"tiers": {
|
|
"FREE": "Free",
|
|
"AGENT_PRO": "Agent Pro",
|
|
"INVESTOR": "Investor",
|
|
"ENTERPRISE": "Enterprise"
|
|
},
|
|
"tierDescriptions": {
|
|
"FREE": "Get started for free, explore the platform",
|
|
"AGENT_PRO": "For professional real estate agents",
|
|
"INVESTOR": "Analytics tools for investors",
|
|
"ENTERPRISE": "Comprehensive solution for businesses"
|
|
},
|
|
"features": {
|
|
"analytics": "Market analytics",
|
|
"aiValuation": "AI valuation",
|
|
"prioritySupport": "Priority support",
|
|
"featuredListing": "Featured listings",
|
|
"leadManagement": "Lead management",
|
|
"marketReports": "Market reports",
|
|
"portfolioTracking": "Portfolio tracking",
|
|
"apiAccess": "API access"
|
|
},
|
|
"ctaFree": "Register for free",
|
|
"ctaUpgrade": "Get started",
|
|
"ctaEnterprise": "Contact sales",
|
|
"ctaCurrentPlan": "Current plan",
|
|
"ctaDowngrade": "Downgrade",
|
|
"ctaManageSubscription": "Manage subscription",
|
|
"currentPlan": "Current",
|
|
"currentPlanBadge": "You are on the {plan} plan",
|
|
"comparisonTitle": "Compare plans in detail",
|
|
"comparisonSubtitle": "See all features for each plan",
|
|
"feature": "Feature",
|
|
"ctaTitle": "Ready to get started?",
|
|
"ctaDescription": "Sign up today and start your real estate journey with GoodGo",
|
|
"ctaRegister": "Register now",
|
|
"ctaLearnMore": "Learn more"
|
|
},
|
|
"search": {
|
|
"filters": "Filters",
|
|
"allTransactions": "All transactions",
|
|
"allPropertyTypes": "All property types",
|
|
"allAreas": "All areas",
|
|
"allPrices": "All prices",
|
|
"bedrooms": "Bedrooms",
|
|
"bedroomsCount": "{count}+ BR",
|
|
"areaLabel": "Area (m²)",
|
|
"areaFrom": "From",
|
|
"areaTo": "To",
|
|
"district": "District",
|
|
"searchButton": "Search",
|
|
"priceRanges": {
|
|
"under1b": "Under 1 billion",
|
|
"1to3b": "1 - 3 billion",
|
|
"3to5b": "3 - 5 billion",
|
|
"5to10b": "5 - 10 billion",
|
|
"10to20b": "10 - 20 billion",
|
|
"over20b": "Over 20 billion"
|
|
}
|
|
},
|
|
"compare": {
|
|
"title": "Compare properties",
|
|
"subtitle": "Comparing {count} properties",
|
|
"emptyState": "Select at least 2 properties to compare. Go back to search to select.",
|
|
"goToSearch": "Go to search",
|
|
"addMore": "Add more",
|
|
"clearAll": "Clear all",
|
|
"compareNow": "Compare now",
|
|
"needMore": "Need more",
|
|
"selected": "{count}/{max} selected",
|
|
"removeItem": "Remove",
|
|
"addToCompare": "Compare",
|
|
"removeFromCompare": "Remove from compare",
|
|
"added": "Added",
|
|
"loadError": "Unable to load data. Please try again.",
|
|
"retry": "Retry",
|
|
"property": "Property",
|
|
"noImage": "No image",
|
|
"remove": "Remove",
|
|
"price": "Price",
|
|
"transactionType": "Transaction",
|
|
"sale": "Sale",
|
|
"rent": "Rent",
|
|
"propertyType": "Property type",
|
|
"area": "Area",
|
|
"pricePerM2": "Price/m²",
|
|
"bedrooms": "Bedrooms",
|
|
"bathrooms": "Bathrooms",
|
|
"rooms": "rooms",
|
|
"direction": "Direction",
|
|
"floors": "Floors",
|
|
"yearBuilt": "Year built",
|
|
"legalStatus": "Legal status",
|
|
"location": "Location",
|
|
"amenities": "Amenities",
|
|
"projectName": "Project",
|
|
"priceRange": "Price range",
|
|
"areaRange": "Area range",
|
|
"pricePerM2Range": "Price/m² range",
|
|
"average": "Average"
|
|
}
|
|
}
|