◆ booting phatdev.net
<PhatLam/>
000%
← All projects
Full-stack · Next.js · CMS

phatdev.net

A bilingual Next.js 14 portfolio with a custom MySQL-backed CMS, plugin documentation, a plugin update server and an MCP endpoint that lets AI agents query projects and docs.

Live in production

phatdev.netphatdev.net
Role
Design, development, operations
Platform
Next.js 14, MySQL, PM2, Nginx
Languages
Vietnamese, English
For AI
MCP (12 tools), WebMCP (7 tools), llms.txt
99 / 100
PageSpeed mobile / desktop, measured 19 Oct 2026
12
read-only MCP tools for AI agents
18
bilingual (vi / en) technical blog posts
2
languages rendered server-side with hreflang

Highlights

MCP for AI agents

A Model Context Protocol endpoint at /api/mcp lets AI read the profile and projects and search plugin docs; read-only and rate-limited.

Bilingual SEO

Server rendering with canonical and hreflang per page, an auto-generated sitemap, and Person, CreativeWork and TechArticle structured data.

Custom CMS and docs

Profile, projects, skills, contacts and plugin docs managed on MySQL, with no third-party CMS.

Plugin update server

Ships updates for in-house plugins and themes with licensing and download stats.

Light, dark and context-aware images

Follows the device setting; project images switch by language and theme, with 4K originals in a lightbox.

Screenshots

Home: intro and profile terminalHome: intro and profile terminal
Home: intro and profile terminal
Projects section with rendered covers per language and themeProjects section with rendered covers per language and theme
Projects section with rendered covers per language and theme
Project page: facts, metrics, highlightsProject page: facts, metrics, highlights
Project page: facts, metrics, highlights
4K lightbox with arrow-key navigation4K lightbox with arrow-key navigation
4K lightbox with arrow-key navigation
Plugin docs with grouped navigationPlugin docs with grouped navigation
Plugin docs with grouped navigation

Click an image to enlarge, use the arrow keys to browse.

On this page
  1. Goal
  2. Architecture
  3. For search engines and AI
  4. Interface
  5. Compared to other portfolio approaches
  6. License
  7. Third-party libraries and resources (34)

Goal

One place that presents skills and products while also serving the plugins: documentation, updates and licensing. Fully self-owned code, no prebuilt template.

Architecture

Application

Next.js 14 (App Router) under PM2 behind Nginx; data in MySQL through an account limited to reading and writing rows, with no schema privileges.

CMS

A custom admin for profile, projects, galleries, skills, contacts and plugin docs, with JWT sessions and login rate limiting.

Docs and updates

Every plugin has documentation and a changelog; the update server ships new releases to the sites that use them.

For search engines and AI

  • Server rendering with canonical and vi / en hreflang on every page.
  • Auto-generated sitemap and robots.txt, schema.org structured data.
  • llms.txt describing the content for language models.
  • A read-only MCP endpoint so AI agents can query projects and docs.

Interface

Light and dark modes that follow the device, self-hosted fonts with full Vietnamese coverage, and project images that switch by language and theme.

Compared to other portfolio approaches

Criterion phatdev.net Framer / WordPress template Linktree
Owns its source code ~
Custom MySQL CMS
Server-rendered bilingual SEO ~
Built-in plugin docs
MCP for AI agents

License

Source code is not public, all rights reserved. The project does not declare any license in its code (no LICENSE file and no license field).

The screenshots on this page were taken by me from the running version of the project.

See the License and credits page →

Third-party libraries and resources (34)

Swipe sideways to see all columns.

NameLicenseVersionTypeSource
@types/bcryptjsMIT2.4.6Library (TypeScript types)github.com/DefinitelyTyped/DefinitelyTyped
@types/nodeMIT20.16.10Library (TypeScript types)github.com/DefinitelyTyped/DefinitelyTyped
@types/nodemailerMIT6.4.16Library (TypeScript types)github.com/DefinitelyTyped/DefinitelyTyped
@types/qrcodeMIT1.5.6Library (TypeScript types)github.com/DefinitelyTyped/DefinitelyTyped
@types/reactMIT18.3.11Library (TypeScript types)github.com/DefinitelyTyped/DefinitelyTyped
@types/react-domMIT18.3.0Library (TypeScript types)github.com/DefinitelyTyped/DefinitelyTyped
bcryptjsMIT2.4.3Librarygithub.com/dcodeIO/bcrypt.js
dompurify(MPL-2.0 OR Apache-2.0)3.4.3Librarygithub.com/cure53/DOMPurify
framer-motionMIT11.11.0Librarygithub.com/framer/motion
isomorphic-dompurifyMIT3.13.0Librarygithub.com/kkomelin/isomorphic-dompurify
joseMIT5.9.4Librarygithub.com/panva/jose
markedMIT18.0.3Librarygithub.com/markedjs/marked
mysql2MIT3.11.3Librarygithub.com/sidorares/node-mysql2
nextMIT14.2.35Librarygithub.com/vercel/next.js
nodemailerMIT-08.0.5Librarygithub.com/nodemailer/nodemailer
qrcodeMIT1.5.4Librarygithub.com/soldair/node-qrcode
reactMIT18.3.1Librarygithub.com/facebook/react
react-domMIT18.3.1Librarygithub.com/facebook/react
sharpApache-2.00.35.5Librarygithub.com/lovell/sharp
zodMIT3.23.8Librarygithub.com/colinhacks/zod
autoprefixerMIT10.4.20Library (development only)github.com/postcss/autoprefixer
jsdomMIT29.0.2Library (development only)github.com/jsdom/jsdom
playwright-coreApache-2.01.48.1Library (development only)github.com/microsoft/playwright
postcssMIT8.4.47Library (development only)github.com/postcss/postcss
tailwindcssMIT3.4.13Library (development only)github.com/tailwindlabs/tailwindcss
typescriptApache-2.05.6.2Library (development only)github.com/microsoft/TypeScript
InterOFL-1.1-Font (admin area)rsms.me/inter
JetBrains MonoOFL-1.1-Font (public site)jetbrains.com/lp/mono
Space GroteskOFL-1.1-Font (public site)fonts.google.com/specimen/Space+Grotesk
Font Awesome FreeOnly the SVG paths of a few icons are used; the CSS and font are not loaded.CC-BY-4.0 AND OFL-1.1 AND MIT6.7.2Icon (public site)fontawesome.com/license/free
Font Awesome FreeAdmin area.CC-BY-4.0 AND OFL-1.1 AND MIT6.5.2Icon (admin area)fontawesome.com/license/free
Ảnh minh hoạ trong bài blog (36)AI-generated images; they do not show real people.Created with OpenAI's image model through ChatGPT, under OpenAI's terms of use-Image-
Real-ESRGAN (mô hình realesrgan-x4plus)Upscales blog images to 4K.BSD-3-Clause-Tool (build tool)github.com/xinntao/Real-ESRGAN
Real-ESRGAN-ncnn-vulkan (chương trình chạy mô hình)MIT-Tool (build tool)github.com/xinntao/Real-ESRGAN-ncnn-vulkan

Credit: Font Awesome Free by @fontawesome, https://fontawesome.com. Icons: CC BY 4.0, fonts: SIL OFL 1.1, code: MIT. Copyright Fonticons, Inc.

More projects