Ejecutar un frontend con sus datos de ejemplo integrados
Cómo funcionan el sitio web y el panel sin ninguna API, qué funciona allí, qué dice el aviso de datos de ejemplo, qué pasa cuando una API conectada deja de responder, y cómo pasar a tu API o quitar los datos de ejemplo.
Para el paquete Full Stack
Qué es
El sitio web y el panel llevan cada uno las respuestas de una API de Northstack con datos de ejemplo, exportadas de ella, así que cada uno funciona por sí solo sin back-end: todas las pantallas del panel, y el formulario de contacto y el pago de licencias del sitio web, funcionan como con la API. Es con lo que funciona un paquete de un solo frontend nada más instalarlo, y un aviso "Sample data" al final de cada página lo indica, para que nadie lo confunda con un back-end conectado.
Cómo activarla y desactivarla
No hay ningún indicador. Lo decide un solo ajuste, NEXT_PUBLIC_API_BASE_URL, compilado al construir la aplicación:
# empty or missing: the built-in sample data, no API needed
NEXT_PUBLIC_API_BASE_URL=
# set: your API, with the /api suffix
NEXT_PUBLIC_API_BASE_URL=http://localhost:8000/api- Sin Docker,
yarn installyyarn deven la carpeta de la aplicación sin archivo.envfuncionan con los datos de ejemplo. Un.envcopiado de.env.exampleapunta en cambio a la API enhttp://localhost:8000/api. - Con Docker, construye la imagen con
--build-arg NEXT_PUBLIC_API_BASE_URL=para los datos de ejemplo. Sin ese argumento la imagen se construye para la API enhttp://localhost:8000/api. - El
docker compose up --builddel Full Stack siempre construye ambos frontends con la dirección de la API. - Tras cambiar el valor, reinicia
yarn dev, o ejecutayarn buildde nuevo, o construye la imagen de nuevo.
El panel con datos de ejemplo
| Área | Con los datos de ejemplo |
|---|---|
| Inicio de sesión | Entra cualquier contraseña. owner@, admin@, member@, billing@, platform@ y support@northstack.example abren cada uno esa cuenta de ejemplo y su rol, una cuenta creada en la página de registro inicia sesión como ella misma, y cualquier otro correo abre el del propietario. Los campos vacíos o mal formados se rechazan como los rechaza la API. |
| Datos | Forma Studio y Monogram completos, con sus proyectos, tableros, archivos, equipo, invitaciones, matriz de roles, facturación y facturas, claves de API, actividad y las conversaciones pasadas del asistente, y las organizaciones, usuarios, personal, roles y ajustes de la plataforma. Cada fecha se adelanta, así que la actividad de esta semana sigue siendo de esta semana. |
| Cambios | Real: crear un proyecto, mover una tarjeta, invitar a alguien, editar la matriz de roles, comprar un plan con el pago de prueba o suspender una organización cambia los datos, y sobrevive a una recarga, solo en ese navegador. |
| Permisos | Se comprueba como lo comprueba la API, desde la matriz de roles de cada espacio de trabajo, así que cada rol ve exactamente lo que vería con la API. |
| Facturación | Como en una API sin claves de Stripe: un cambio a un plan superior pasa por el pago de prueba integrado, un cambio a uno inferior se programa para la renovación y Keep lo deshace. Las facturas se descargan en PDF. |
| Correo | No se envía ninguno. Un enlace de invitación o de restablecimiento de contraseña se escribe en cambio en la consola del navegador, y funciona allí. |
| Actualizaciones en vivo | Ninguna: la campana muestra la actividad que ya está en los datos de ejemplo. |
| Claves de API | Creadas y revocadas, con el secreto mostrado una vez, pero una clave no autentica nada, ya que no hay API. |
| Asistente de IA | Se muestran sus conversaciones pasadas y la tarjeta de tareas de ejemplo. Una pregunta nueva pide primero una clave de proveedor y luego responde que el asistente necesita la API; no se llama a ningún modelo. |
Cada respuesta se retrasa una fracción de segundo a propósito, para que se vean los estados de carga con los que se entrega el panel.
El sitio web con datos de ejemplo
La página de inicio y todas las páginas de contenido nunca llaman a la API, así que se ven igual en ambos casos. Las dos partes que sí la llaman responden en el navegador, y en el servidor para el primer pintado, desde los datos de ejemplo:
| Área | Con los datos de ejemplo |
|---|---|
| Pago de licencias | Se comprueba como lo comprueba la API. Tanto la tarjeta como PayPal van al propio Test checkout del sitio en /checkout/test: Pay marca el pedido como pagado y el recibo muestra una clave de licencia; Cancel payment lo cancela. El importe es el precio de la licencia, sea lo que sea que envíe el navegador. |
| Formulario de contacto | Se comprueba campo por campo como lo comprueba la API, y se responde con un éxito. No se envía nada a ninguna parte. |
| Lo que envían los visitantes | Los pedidos y los mensajes se guardan solo en ese navegador, así que un recibo sigue mostrando su clave tras una recarga. |
| Correo y límites | No se envía por correo ningún recibo ni mensaje, y los límites por dirección de la API en los dos formularios no se aplican. |
El aviso de datos de ejemplo
Mientras responden los datos de ejemplo, un aviso "Sample data" queda al final de cada página, al final de la página y no encima de ella, así que desplazado hasta el final no tapa nada. Dismiss lo oculta hasta la siguiente carga completa de la página.
| Aplicación | Sin API definida | Con una API definida que no responde |
|---|---|---|
| Panel (todas las páginas, incluida la de inicio de sesión) | "No API is connected, so this dashboard runs on built-in sample data and your changes stay in this browser. Any password signs in: owner@, admin@, member@, billing@, platform@ or support@northstack.example opens that role." | "The API at http://localhost:8000/api is not answering, so this dashboard is showing built-in sample data, not your workspace's. Changes made now stay in this browser. Start the API, then reload this page." |
| Sitio web | "No API is connected (NEXT_PUBLIC_API_BASE_URL is empty), so the site runs on built-in sample data: the contact form and the license checkout answer in this browser and send nothing. Set NEXT_PUBLIC_API_BASE_URL in .env to use your API." | "The API at http://localhost:8000/api is not answering, so this site is showing built-in sample data. Orders and messages sent now stay in this browser. Start the API, then reload this page." |
La dirección de la segunda columna es con la que se construyó la aplicación. Mientras el panel funciona con los datos de ejemplo, el pie de su espacio de trabajo también dice "Sample data for demonstration."; con su propia API nunca lo dice.
Cuando una API conectada deja de responder
Con NEXT_PUBLIC_API_BASE_URL definido, los datos de ejemplo también la sustituyen cuando no se puede llegar a la API en absoluto: no está en marcha, un tiempo de espera agotado, o bloqueada porque su CORS_ORIGIN no incluye la aplicación. Una respuesta que dio la API, incluso un 404 o un 500, se muestra siempre tal cual.
- Tras un fallo se vuelve a preguntar a la API como máximo cada 30 segundos, y la aplicación vuelve a ella en cuanto responde.
- El panel muestra su aviso siempre que la sustituye.
- El sitio web la sustituye solo en el navegador: una página que renderiza su servidor nunca muestra datos de ejemplo. Su aviso se muestra en
yarn dev, y en una versión de producción solo si se construyó conNEXT_PUBLIC_SAMPLE_DATA_NOTICE=always(en.envantes deyarn build, o--build-arg NEXT_PUBLIC_SAMPLE_DATA_NOTICE=alwayscon Docker). - Esto cubre una API que se detuvo, no una aplicación sin API: el navegador sigue probando la dirección y registra cada petición rechazada en su consola. Sin ninguna API, deja la dirección vacía.
Pasar a tu API
Define NEXT_PUBLIC_API_BASE_URL con la dirección de la API con el sufijo /api, y reinicia yarn dev o construye de nuevo. La API debe incluir la dirección de la aplicación en su CORS_ORIGIN. Lo que se cambió con los datos de ejemplo se queda en ese navegador y no se envía a la API.
cp .env.example .env
yarn devEmpezar de nuevo
Borra los datos del sitio para la dirección de la aplicación en los ajustes del navegador, o ejecuta uno de estos en la consola del navegador, y los ejemplos vuelven como se entregaron:
localStorage.removeItem("northstack_mock_db_v1"); location.reload();localStorage.removeItem("northstack_site_mock_db_v1"); location.reload();Quitarlo
Cuando una aplicación funcione definitivamente con tu propia API, elimina los datos de ejemplo de su código, en la carpeta de la aplicación:
yarn remove:mock- Elimina
src/lib/mock/y el aviso (src/components/SampleDataNotice/) con sus mensajes, quita cada bloque marcadomock-apien el código, en.env.example, en elDockerfiley en las guías de la propia aplicación, y en el Full Stack los pasajes marcados delQUICKSTART.mdy elREADME.mdde la raíz, y dejaremove:mockcomo una nota de una línea que indica que los datos de ejemplo ya se eliminaron. En el sitio web también elimina las líneas de documentación etiquetadas{mock}. Cada archivo queda como estaría si los datos de ejemplo nunca se hubieran añadido. yarn remove:mock --dry-runlista los cambios sin hacerlos, y una segunda ejecución informa de que no queda nada por hacer. Funciona antes o después deyarn remove:demo.- La aplicación necesita entonces
NEXT_PUBLIC_API_BASE_URLdefinido. Ejecuta despuésyarn typecheckyyarn build. - Elimina código y no se puede deshacer sin control de versiones, así que haz un commit antes.
Exportarlos de nuevo desde la API
Los datos de ejemplo son las propias respuestas de la API con datos de ejemplo, así que tras cambiarlos, expórtalos de nuevo. En back-end, con la API cargada y en marcha:
back-endyarn export:mockInicia sesión como cada cuenta de ejemplo, lee lo que muestran las dos aplicaciones y escribe los archivos de datos del panel y del sitio web junto a él, en ../dashboard/src/lib/mock/db/seed/ y ../website/src/lib/mock/db/seed/. No se escribe nada en la base de datos. --api http://host:8000 lee otra API. Un navegador que tenga una copia anterior la descarta en su siguiente carga.
Cómo está construida
Incluido con tu compra. Inicia sesión para leerlo o ábrelo en tu descarga.
Dónde viven los datos de ejemplo en cada aplicación, cómo llega una petición hasta ellos y cómo mantenerlos al día con tu API.