Astro 混合渲染:文章页静态生成,动态路由服务端渲染
DevBlog — Astro 作品集模板
作者 devsebastian44
DevBlog 是一个基于 Astro 的技术博客与作品集模板,面向编程、网络安全、数据与 AI 主题,集成 Supabase 认证与互动功能。
看看你的网站会是什么样
浏览真实页面截图,比较内容排版与手机效果。点击下方缩略图切换,放大查看整页细节。
全部页面与视图 3
截图用于了解视觉与布局,交互效果请以实际项目为准。
值得关注的模板亮点
从已有项目资料中,快速了解它的特点。
Supabase 认证:注册、登录与持久会话
访客互动:无需注册即可点赞、收藏和评论,状态保存在 localStorage
文章侧边栏实时显示点赞、评论与书签计数
Prisma 管理 PostgreSQL 模式,并启用行级安全策略(RLS)
内置 ESLint、Prettier、TypeScript 类型检查与 Playwright 测试脚本
模板详细介绍
DevBlog 是一个以 Astro 构建的技术内容平台模板,主题覆盖编程、网络安全、数据科学与人工智能。它采用混合渲染模式:文章页面在构建时静态生成,而个人资料与用户活动等动态路由通过服务端渲染提供。
模板内置基于 Supabase 的完整用户认证流程(注册、登录、持久会话),并支持访客在不注册的情况下通过 localStorage 记录点赞、收藏和评论。文章侧边栏显示点赞、评论与书签的实时计数。数据库使用 PostgreSQL,通过 Prisma ORM 管理迁移与类型,并启用行级安全策略(RLS)限制用户只能访问自己的数据。
样式方面使用 Tailwind CSS 与排版插件,采用暗色玻璃拟态设计,字体为 Aldrich。项目包含 ESLint、Prettier、TypeScript 类型检查与 Playwright 端到端测试脚本,并提供 Docker 相关配置。
使用该模板需要自行准备 Supabase 项目并配置环境变量,数据库表结构需通过 Prisma 应用。演示图片、字体等第三方素材的许可需单独核对。
适合你的项目吗?
适用场景
- 搭建以编程、网络安全、数据或 AI 为主题的技术博客
- 创建带用户认证与互动功能的个人作品集站点
- 需要访客无需注册即可参与点赞、收藏与评论的内容平台
- 使用 Astro 与 Supabase 组合进行全栈项目实践
适合人群
- 熟悉 Astro 与 TypeScript 的前端开发者
- 需要集成 Supabase 认证与数据库的博客作者
- 希望以 MIT 许可代码为基础进行二次开发的团队
- 计划部署到 Vercel 并自行管理环境变量的用户
上手与定制指南
结合仓库当前版本的说明,按下面的资料检查内容、配置与运行要求。
- 1
需要 Node.js(版本由 .nvmrc 指定)与 npm
- 2
需创建 Supabase 项目并获取 URL 与 anon key
- 3
复制 .env.example 为 .env 并填写 PUBLIC_SUPABASE_URL 与 PUBLIC_SUPABASE_ANON_KEY
- 4
通过 npx prisma db push 或 npx prisma migrate deploy 应用数据库模式
- 5
部署到 Vercel 时需在项目设置中添加相同的环境变量
授权与来源资料
使用条件与限制
免费使用 · 保留许可声明本次收录的是公开仓库中采用 MIT 许可的免费版本;免费范围为该版本代码,不代表外部服务或第三方素材免费。
使用时需要遵守
- 允许免费使用、修改、商用和分发该版本代码。
- 分发代码副本或实质性部分时,保留原作者版权声明和完整 MIT 许可声明。
- 代码按现状提供;担保与责任限制以原许可证及适用法律为准。
额外费用与待核对事项
- 演示图片、字体、图标及其他第三方素材需按各自许可核对,不能仅凭代码的 MIT 许可判断。
- 域名、托管、数据库、支付或 AI 等外部服务可能另外收费。
- README 声明本项目仅用于教育和合乎道德的网络安全目的,属于项目特定的用途限制。
- 使用模板需要自行拥有 Supabase 账户并创建项目,属于外部服务账户要求。
- 运行模板必须配置 Supabase 的 URL 与 anon key 环境变量,属于外部服务凭据要求。
- 部署流程依赖 Vercel 外部平台账户,属于外部服务要求。
查看原文依据
Permission is hereby granted, free of charge
许可证原文
⚠️ **Disclaimer:** This project is for educational and ethical cybersecurity purposes only.
README 原文
Una cuenta en **Supabase** con un proyecto creado y las tablas del esquema aplicadas mediante Prisma
README 原文
PUBLIC_SUPABASE_URL=https://tu-proyecto.supabase.co PUBLIC_SUPABASE_ANON_KEY=tu_anon_key
README 原文
https://github.com/devsebastian44/DevBlog/blob/main/LICENSEhttps://github.com/devsebastian44/DevBlog/blob/main/README.md1. Conecta el repositorio a un proyecto en [Vercel](https://vercel.com).
README 原文
DeepSeek 根据仓库许可证和 README 整理 ·2026-10-05。结果仅覆盖已读取资料,依赖、图片、字体及后续条款变更以各自原文为准。
项目核对记录与介绍依据
模板资料
- 来源平台
- Astro Themes
- 资料与维护参考分
- 资料较完整 · 88 / 100
- 技术栈
- Astro · React
- 网站类型
- 作品集 · 博客
这个分数如何计算
本站按许可资料(最高30分)、演示链接(12分)、预览图(10分)、Star数(15分)、记录的维护时间(15分)、描述完整度(8分)、功能记录(5分)和分类资料(5分)计算。它不是代码、安全或性能测试,也不是 Google 评分;有链接不代表已实测可用。
这个项目需要核对什么
- 记录的仓库更新时间
- 2026-04-27
- 截图检查日期
- 2026-10-05
已收录演示链接。请用你的内容与屏幕尺寸检查;有演示不代表表单、认证或支付已经可用。
目录记录的主要技术栈是 Astro。请通过依赖清单和锁文件核对实际版本与托管要求。这些说明基于收录资料,不代表代码审计或部署实测。
查看具体选型方法 →介绍的制作与核对状态
介绍由 AI 辅助整理目录与仓库资料。仓库作者不等于这篇介绍的审核者。
审核声明: [email protected] · 2026-10-05
查看当时使用的来源资料
SHA-256: 84e46c87952138d2852291258ed3bf9a58ab4398f73fb7add2903365c8f79e3b
2026-10-05T01:18:29.289Z
来源文件 / 仓库# 📝 DevBlog







> 🌐 **Live:** [devblog44.vercel.app](https://devblog44.vercel.app)
>
> ⚠️ **Disclaimer:** This project is for educational and ethical cybersecurity purposes only.
---
## 🧠 Overview
**DevBlog** es una plataforma de contenido técnico de alto rendimiento construida
con **Astro 6** en modo híbrido (SSR + SSG), orientada a publicaciones sobre
programación, ciberseguridad, ciencia de datos e inteligencia artificial. Combina
la generación estática de contenido para máxima velocidad y SEO con capas dinámicas
de interacción en tiempo real respaldadas por **Supabase** como Backend-as-a-Service.
El proyecto integra un sistema completo de autenticación de usuarios (registro,
login, sesión persistente), interacciones sociales anónimas para visitantes sin
cuenta (likes, marcadores, comentarios vía `localStorage`), y un sistema de
actividad personalizada por usuario. La base de datos PostgreSQL de Supabase se
gestiona con **Prisma ORM** para migraciones y tipado del esquema, mientras que
las políticas **RLS (Row-Level Security)** garantizan que cada usuario solo acceda
y modifique sus propios datos.
El stack de desarrollo incluye tipado estricto con **TypeScript 5**, linting con
**ESLint** configurado para Astro y TypeScript, formateo con **Prettier**, y tests
E2E con **Playwright**. El proyecto sigue una arquitectura moderna centrada en
**GitHub** como repositorio principal y fuente de verdad.
---
## ⚙️ Features
- **Renderizado híbrido SSR + SSG** con Astro 6 y Vite: las páginas de artículos
se generan estáticamente en build time para máxima velocidad, mientras que las
rutas dinámicas (perfil, actividad) se sirven con SSR.
- **Sistema de autenticación completo** vía Supabase Auth: registro con email,
login seguro, gestión de sesión persistente y página de actividad personalizada
por usuario autenticado.
- **Interacciones para usuarios invitados** — Visitantes sin cuenta pueden dar
likes, guardar favoritos y escribir comentarios, con estado rastreado localmente
vía `localStorage` sin necesidad de registro.
- **Panel lateral interactivo por artículo** con contadores en tiempo real de
likes, comentarios y marcadores, actualizado mediante el SDK de Supabase en
el cliente.
- **Danger Zone — eliminación de cuenta** con flujo anti-caché implementado
mediante funciones RPC personalizadas en Supabase para garantizar borrado
completo y seguro de todos los datos del usuario.
- **Políticas RLS (Row-Level Security)** en PostgreSQL que aseguran a nivel de
base de datos que cada usuario solo puede leer y modificar sus propios registros,
sin depender únicamente de validaciones del lado del cliente.
- **Gestión del esquema con Prisma ORM** en la carpeta `prisma/`, permitiendo
migraciones versionadas y tipado automático de las entidades de la base de datos.
- **Diseño premium futurista** con estética dark, glassmorphism, transiciones
suaves, tipografía Aldrich y sistema de diseño construido sobre Tailwind CSS 4
con el plugin `@tailwindcss/typography` para renderizado de contenido Markdown.
- **Tests E2E con Playwright** (`@playwright/test`) configurados como dependencia
de desarrollo para validar flujos críticos de usuario.
- **Pipeline de calidad completo** con scripts `lint`, `lint:fix`, `format`,
`format:check` y `type-check` ejecutables desde `package.json`.
- **Docker-ready** con `.dockerignore` configurado para containerización del
entorno de producción.
- **Contenido temático** cubriendo programación, ciberseguridad, ciencia de
datos e inteligencia artificial.
---
## 🛠️ Tech Stack
| Categoría | Tecnología | Versión |
| ----------------- | ---------------------------------- | ------- |
| Framework web | Astro (SSR/SSG híbrido) | 6.1.3+ |
| Lenguaje | TypeScript | 5.9+ |
| Estilos | Tailwind CSS + Typography | 4.x |
| Build tool | Vite (vía Astro) | — |
| BaaS / Auth | Supabase (PostgreSQL + Auth + RLS) | 2.93+ |
| ORM / Migraciones | Prisma | — |
| Linting | ESLint + @typescript-eslint | — |
| Formateo | Prettier | — |
| Type checking | TypeScript `tsc --noEmit` | — |
| Tests E2E | Playwright | 1.59+ |
| Despliegue | Vercel | — |
| Contenedor | Docker (`.dockerignore`) | — |
| Node versioning | `.nvmrc` | — |
| Licencia | MIT | — |
---
## 📦 Installation
### Prerrequisitos
- **Node.js** (versión fijada en `.nvmrc`)
- **npm** actualizado
- Una cuenta en **Supabase** con un proyecto creado y las tablas del esquema
aplicadas mediante Prisma
### 1. Clonar el repositorio
```bash
git clone https://github.com/devsebastian44/DevBlog.git
cd DevBlog
```
### 2. Usar la versión correcta de Node
```bash
nvm use
```
### 3. Instalar dependencias
```bash
npm install
```
### 4. Configurar variables de entorno
Copia el archivo de ejemplo y completa tus credenciales de Supabase:
```bash
cp .env.example .env
```
```env
# .env — nunca incluir en el repositorio
PUBLIC_SUPABASE_URL=https://tu-proyecto.supabase.co
PUBLIC_SUPABASE_ANON_KEY=tu_anon_key
```
### 5. Aplicar el esquema de base de datos (Prisma)
```bash
# Para entorno de desarrollo
npx prisma db push
# o para entornos de producción
npx prisma migrate deploy
```
---
## ▶️ Usage
### Servidor de desarrollo
```bash
npm run dev
```
Abre [http://localhost:4321](http://localhost:4321) en tu navegador.
> El puerto por defecto de Astro es `4321`.
### Build de producción
```bash
npm run build
npm run preview # Previsualizar el build localmente
```
### Comandos de calidad de código
```bash
# Verificar errores de linting
npm run lint
# Corregir errores de linting automáticamente
npm run lint:fix
# Formatear todos los archivos
npm run format
# Verificar formato sin modificar
npm run format:check
# Verificar tipos TypeScript
npm run type-check
```
### Tests
El proyecto utiliza **Playwright** para pruebas E2E. Los tests están configurados para ejecutarse de forma aislada.
```bash
# Ejecutar todos los tests
npm test
# Ejecutar tests con UI interactiva
npx playwright test --ui
```
### Despliegue en Vercel
1. Conecta el repositorio a un proyecto en [Vercel](https://vercel.com).
2. Añade las variables de entorno en `Settings → Environment Variables`:
- `PUBLIC_SUPABASE_URL`
- `PUBLIC_SUPABASE_ANON_KEY`
3. Vercel detecta automáticamente Astro y configura el build (`astro build`).
4. Redespliega tras cualquier cambio en las variables de entorno.
---
## 📁 Project Structure
```
DevBlog/
│
├── src/ # Código fuente principal de la aplicación
│ ├── pages/ # Rutas de Astro (SSR + SSG)
│ │ ├── index.astro # Página de inicio / listado de posts
│ │ ├── blog/
│ │ │ └── [slug].astro # Página dinámica de artículo individual
│ │ ├── auth/ # Rutas de autenticación (login, registro)
│ │ ├── profile/ # Perfil y página "Mi Actividad"
│ │ └── api/ # Endpoints de Astro (server-side)
│ ├── components/ # Componentes reutilizables de Astro/TS
│ │ ├── blog/ # Componentes específicos de artículos
│ │ │ └── PostSidebar.astro # Panel lateral con likes, comentarios, bookmarks
│ │ ├── auth/ # Formularios de login y registro
│ │ └── ui/ # Componentes de UI genéricos (glassmorphism)
│ ├── layouts/ # Layouts base de la aplicación
│ ├── lib/
│ │ └── supabase.ts # Inicialización y cliente de Supabase JS SDK
│ └── styles/ # Estilos globales CSS
│
├── prisma/ # ORM y esquema de base de datos
│ └── schema.prisma # Definición de modelos y relaciones PostgreSQL
│
├── public/ # Assets estáticos (imágenes, favicon, fonts)
│
├── docs/ # Documentación del proyecto
│ └── Logo.png # Logo oficial de DevBlog
│
├── diagrams/ # Diagramas de arquitectura técnica
│
├── .vscode/ # Configuración de editor recomendada
│
├── .dockerignore # Exclusiones para build de Docker
├── .editorconfig # Configuración consistente entre editores
├── .env.example # Plantilla de variables de entorno
├── .eslintrc.json # ESLint con @typescript-eslint strict
├── .gitattributes # Normalización de line endings
├── .gitignore # Exclusiones de Git
├── .nvmrc # Versión de Node.js fijada
├── .prettierrc # Formato: singleQuote, semi, printWidth 80
├── astro.config.mjs # Configuración de Astro + Tailwind vía Vite
├── tsconfig.json # Configuración del compilador TypeScript
├── package.json # Dependencias y scripts del proyecto
├── LICENSE # Licencia MIT
└── README.md # Documentación principal
```
---
## 🔐 Security
### Row-Level Security (RLS) en Supabase
Todas las tablas de interacción del usuario (likes, comentarios, marcadores,
datos de perfil) tienen políticas RLS activas en PostgreSQL que garantizan, a
nivel de base de datos, que un usuario autenticado solo pueda leer y modificar
sus propios registros. Esto proporciona una capa de seguridad independiente
de la lógica de cliente.
### Danger Zone y eliminación de cuenta
El flujo de eliminación de cuenta está implementado mediante **funciones RPC
personalizadas en Supabase** en lugar de llamadas directas de cliente, lo que
previene condiciones de carrera y garantiza el borrado completo y transaccional
de todos los datos asociados al usuario (posts, likes, comentarios, marcadores).
### Gestión de credenciales
Las credenciales de Supabase se gestionan exclusivamente mediante variables de
entorno (`.env`), excluidas del repositorio vía `.gitignore`. El archivo
`.env.example` documenta las variables requeridas sin exponer valores reales.
Las variables prefijadas con `PUBLIC_` se exponen al cliente de forma controlada
por Astro; ninguna clave de servicio con permisos elevados debe usarse con este
prefijo.
### Autenticación de usuarios invitados
Las interacciones de usuarios anónimos se rastrean exclusivamente en
`localStorage` del navegador, sin crear registros en la base de datos hasta
que el usuario opte por registrarse. Esto evita la acumulación de datos no
verificados en el backend.
### Linting y type safety
La configuración de ESLint incluye las reglas `@typescript-eslint/no-unused-vars`
como error y `@typescript-eslint/no-explicit-any` como advertencia, reforzando
la seguridad de tipos en toda la codebase. El script `type-check` ejecuta
`tsc --noEmit` para detectar errores de tipado sin emitir archivos.
---
## 🌐 Repository Architecture
Este proyecto está centralizado en **GitHub**, que actúa como la única fuente de verdad y entorno de desarrollo. Aquí se gestiona tanto el código fuente del frontend como las configuraciones de seguridad, base de datos y flujos de trabajo de automatización.
La arquitectura se beneficia de la integración continua para validaciones de calidad y despliegue automático hacia Vercel.
---
## 🤝 Contributing
¡Las contribuciones son bienvenidas! Para colaborar:
1. **Fork** el repositorio.
2. Crea una rama para tu mejora: `git checkout -b feature/nueva-funcionalidad`.
3. Realiza tus cambios siguiendo las [guías de estilo](docs/CONTRIBUTING.md).
4. Asegúrate de que los tests pasen: `npm test`.
5. Envía un **Pull Request**.
---
## 🚀 Roadmap
## 📄 License
Este proyecto está distribuido bajo la licencia **MIT**.
Puedes usar, copiar, modificar, fusionar, publicar, distribuir y sublicenciar
el software libremente, siempre que se incluya el aviso de copyright original.
Copyright © 2025 **Sebastián Zhunaula** (devsebastian44)
---
## 👨💻 Author
<table>
<tr>
<td align="center">
<b>Sebastián Zhunaula</b><br/>
<sub>Full-Stack Developer · Frontend Specialist · Content Creator</sub><br/><br/>
<a href="https://github.com/devsebastian44">
<img src="https://img.shields.io/badge/GitHub-devsebastian44-black?style=flat&logo=github" />
</a>
<br/>
<a href="https://devblog44.vercel.app">
<img src="https://img.shields.io/badge/Blog-devblog44.vercel.app-000?style=flat&logo=vercel" />
</a>
</td>
</tr>
</table>
> Este proyecto forma parte de un portafolio de desarrollo web full-stack,
> demostrando integración moderna de Astro 6, Supabase, Tailwind CSS 4,
> TypeScript estricto y Prisma ORM en una plataforma de contenido técnico
> con autenticación completa, interacciones sociales en tiempo real y
> despliegue en producción sobre Vercel.
看看同类模板
对比同技术栈与用途的模板,找到更适合的视觉与内容结构。

astrowind
⭕️ AstroWind: A free template using Astro v7 and Tailwind CSS v4. Astro starter theme.
Astro · 博客

astro-paper
A minimal, accessible and SEO-friendly Astro blog theme.
Astro · 博客

fuwari
✨A static blog template built with Astro.
Astro · 博客

Firefly
Firefly 是一款基于 Astro 的静态博客主题,由 CuteLeaf 在 saicaca 的 Fuwari 模板基础上二次开发,主打清新美观的视觉风格。
Astro · 博客

astro-theme-cactus
A simple Astro theme. Use it to create your blog or website.
Astro · 作品集

astrofy
Astrofy is a free and open-source template for your Personal Portfolio Website built with Astro and TailwindCS…
Astro · 作品集
