* Revise portfolio: warm brown theme, elegant typography, optimized analytics tracking (#55) * Initial plan * Update color theme to warm brown and off-white, add elegant fonts, fix analytics tracking Co-authored-by: denshooter <44590296+denshooter@users.noreply.github.com> * Fix 404 page integration with warm theme, update admin console colors, fix font loading Co-authored-by: denshooter <44590296+denshooter@users.noreply.github.com> * Address code review feedback: fix navigation, add utils, improve tracking Co-authored-by: denshooter <44590296+denshooter@users.noreply.github.com> * Fix accessibility and memory leak issues from code review Co-authored-by: denshooter <44590296+denshooter@users.noreply.github.com> --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: denshooter <44590296+denshooter@users.noreply.github.com> * chore: Code cleanup, add Sentry.io monitoring, and documentation (#56) * Initial plan * Remove unused code and clean up console statements Co-authored-by: denshooter <44590296+denshooter@users.noreply.github.com> * Remove unused components and fix type issues Co-authored-by: denshooter <44590296+denshooter@users.noreply.github.com> * Wrap console.warn in development check Co-authored-by: denshooter <44590296+denshooter@users.noreply.github.com> * Integrate Sentry.io monitoring and add text editing documentation Co-authored-by: denshooter <44590296+denshooter@users.noreply.github.com> --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: denshooter <44590296+denshooter@users.noreply.github.com> * Initial plan * feat: Add Sentry configuration files and example pages - Add sentry.server.config.ts and sentry.edge.config.ts - Update instrumentation.ts with onRequestError export - Update instrumentation-client.ts with onRouterTransitionStart export - Update global-error.tsx to capture exceptions with Sentry - Create Sentry example page at app/sentry-example-page/page.tsx - Create Sentry example API route at app/api/sentry-example-api/route.ts Co-authored-by: denshooter <44590296+denshooter@users.noreply.github.com> * feat: Update middleware to allow Sentry example page and fix deprecated API - Update middleware to exclude /sentry-example-page from locale routing - Remove deprecated startTransaction API from Sentry example page - Use consistent DSN configuration with fallback values Co-authored-by: denshooter <44590296+denshooter@users.noreply.github.com> * refactor: Improve Sentry configuration with environment-based sampling - Add comments explaining DSN fallback values - Use environment-based tracesSampleRate (10% in production, 100% in dev) - Address code review feedback for production-safe configuration Co-authored-by: denshooter <44590296+denshooter@users.noreply.github.com> --------- Co-authored-by: Copilot <198982749+Copilot@users.noreply.github.com>
4.8 KiB
How to Change Texts on the Website
This guide explains how to edit text content on your portfolio website.
Overview
The website uses next-intl for internationalization (i18n), supporting multiple languages. All text strings are stored in JSON files, making them easy to edit.
Where are the Texts?
All translatable texts are located in the /messages/ directory:
/messages/
├── en.json (English translations)
└── de.json (German translations)
How to Edit Texts
1. Open the Translation File
Choose the language file you want to edit:
- For English:
/messages/en.json - For German:
/messages/de.json
2. Find the Text Section
The JSON file is organized by sections:
{
"nav": {
"home": "Home",
"about": "About",
"projects": "Projects",
"contact": "Contact"
},
"home": {
"hero": {
"description": "Your hero description here",
"ctaWork": "View My Work",
"ctaContact": "Contact Me"
}
}
}
3. Edit the Text
Simply change the value (the text after the colon):
Before:
"ctaWork": "View My Work"
After:
"ctaWork": "See My Projects"
4. Save and Reload
After saving the file:
- In development: The changes appear immediately
- In production: Restart the application
Common Text Sections
Navigation (nav)
home,about,projects,contact
Home Page (home)
hero.description- Main hero descriptionhero.ctaWork- Primary call-to-action buttonhero.ctaContact- Contact buttonabout.title- About section titleabout.p1,about.p2,about.p3- About paragraphs
Projects (projects)
title- Projects page titleviewDetails- "View Details" button textcategories.*- Project category names
Contact (contact)
title- Contact form titleform.*- Form field labelssubmit- Submit button text
Footer (footer)
copyright- Copyright textmadeWith- "Made with" text
Privacy Policy & Legal Notice
The privacy policy and legal notice use a dynamic CMS system:
Option 1: Edit via Admin Dashboard (Recommended)
- Go to
/manage(requires login) - Navigate to "Content Manager"
- Select "Privacy Policy" or "Legal Notice"
- Edit using the rich text editor
- Click "Save"
Option 2: Edit Static Fallback
If you haven't set up CMS content, the fallback static content is in:
- Privacy Policy:
/app/privacy-policy/page.tsx(lines 76-302) - Legal Notice:
/app/legal-notice/page.tsx
⚠️ Note: Static content is hardcoded in German. For CMS-based content, you can manage both languages separately.
Adding a New Language
To add a new language (e.g., French):
- Create translation file: Create
/messages/fr.json - Copy structure: Copy from
en.jsonand translate all values - Update i18n config: Edit
/i18n/request.tsexport const locales = ['en', 'de', 'fr'] as const; - Update middleware: Ensure the new locale is supported in
/middleware.ts
Best Practices
- ✅ DO: Keep the JSON structure intact
- ✅ DO: Test changes in development first
- ✅ DO: Keep translations consistent across languages
- ❌ DON'T: Change the keys (left side of the colon)
- ❌ DON'T: Break the JSON format (watch commas and quotes)
Validation
To check if your JSON is valid:
# Install a JSON validator
npm install -g jsonlint
# Validate the file
jsonlint messages/en.json
jsonlint messages/de.json
Or use an online tool: https://jsonlint.com/
Examples
Changing the Hero Description
File: /messages/en.json
{
"home": {
"hero": {
"description": "New description here - passionate developer building amazing things"
}
}
}
Changing Navigation Items
File: /messages/de.json
{
"nav": {
"home": "Startseite",
"about": "Über mich",
"projects": "Projekte",
"contact": "Kontakt"
}
}
Changing Button Text
File: /messages/en.json
{
"home": {
"hero": {
"ctaWork": "Browse My Portfolio",
"ctaContact": "Get In Touch"
}
}
}
Troubleshooting
Changes Don't Appear
- Clear your browser cache
- In development: Stop and restart
npm run dev - In production: Rebuild and restart the container
JSON Syntax Error
- Check for missing commas
- Check for unescaped quotes in text
- Use a JSON validator to find the error
Missing Translation
- Check that the key exists in all language files
- Default language (English) is used if a translation is missing
Need Help?
- Check the Next-intl documentation: https://next-intl-docs.vercel.app/
- Review existing translations for examples
- Test changes in development environment first
Last Updated: January 2026