Small internal weekly planner for family activities and commuting blocks. Visit the official production site at: https://armatusemana.com.ar
This project is a simple weekly planner designed to get out of your way and let you focus on organizing your life. It follows a philosophy similar to Excalidraw—fully browser-based, lightweight, and instantly usable—while still supporting self-hosting for those who want full control. The goal is straightforward: enable anyone to plan their week without friction, no accounts, no setup, just open it and start planning.
- Two block types:
activityandtransport - Color-coded by the main person each block belongs to
- Weekly calendar view rendered as SVG
- Export to
SVG,PNG, or browser print/PDF - Lightweight local persistence with
localStorage - JSON import/export for easy backup or sharing
For a hosted-like local preview from the generated dist/ artifact, run:
npm startThen open http://localhost:4173.
To serve directly from the source tree without building first, run:
npm run start:srcUse start:src when you want a faster source-based preview for testing.
Run the full local merge gate with:
npm run testThat command covers:
- unit tests for pure planner and site-configuration logic
- integration tests for hosted build output plus source/dist serving behavior
- browser-driven synthetic tests for
start:src,dist, and Docker variants
The browser suite uses Playwright with the local Chrome executable at
/Applications/Google Chrome.app/Contents/MacOS/Google Chrome by default.
Override it with PLAYWRIGHT_CHROME_EXECUTABLE_PATH if needed.
For the Docker variant inside npm run test, the local Docker daemon must be
running.
To override the local runtime branding, set one or more site configuration variables before starting either server:
SITE_NAME="Mi Planner" \
SITE_TITLE="Mi Planner | Organizador semanal" \
SITE_DESCRIPTION="Organiza la semana en una sola vista." \
SITE_MENU_ENABLED="true" \
npm startIf these variables are not defined, the app uses the generic self-hosted defaults.
Generate a static output folder with the files needed to deploy or serve the app:
npm run buildTo generate a branded hosted artifact:
SITE_NAME="Arma tu semana!" \
SITE_TITLE="Arma tu semana! | Planner semanal familiar" \
SITE_DESCRIPTION="Organiza actividades, traslados y rutinas familiares en una vista semanal simple para imprimir o exportar." \
SITE_URL="https://armatusemana.com.ar/" \
SITE_OG_IMAGE="https://armatusemana.com.ar/img/og-image.png" \
SITE_ROBOTS="index,follow" \
SITE_MENU_ENABLED="true" \
npm run buildThis creates dist/ with the runtime assets:
index.htmlstyles.cssapp.jsconfig.jsbuild-meta.jsmanifest.jsonrobots.txtsitemap.xmlwhenSITE_URLis definedsw.jsicons/img/
The dist/ folder is ignored by git.
The build output is where hosted branding and SEO metadata are generated. The repository source files remain generic by default.
docker compose up --buildThen open http://localhost:4173.
To override the runtime branding in Docker:
SITE_NAME="Mi Planner" \
SITE_TITLE="Mi Planner | Organizador semanal" \
SITE_DESCRIPTION="Organiza la semana en una sola vista." \
docker compose up --buildThe published Docker image remains generic by default so it can be self-hosted without shipping hosted-site branding or domain-specific SEO values.
docker pull ghcr.io/hjlarrea/weekly-planner:v0.1.0
docker run -d --rm ghcr.io/hjlarrea/weekly-planner:v0.1.0Build artifacts expose a version stamp in the footer of the site.
- If the build runs from a tagged commit, the tag becomes the visible version.
- If the build runs from an untagged commit, the short git SHA becomes the visible version.
npm run buildresolves that version when generatingdist/build-meta.js.
This applies to both:
npm run buildoutput indist/- Docker images built from the repository
This project is licensed under the Apache License 2.0. Any redistribution must preserve the license text and applicable attribution notices.
- No backend is required.
- Data stays in the browser unless you export/import JSON.
npm startbuildsdist/and serves the generated output for a hosted-like preview.npm run start:srcserves the source files directly for a faster source-based preview.npm run buildprepares a staticdist/directory for deployment or external hosting.- The project supports one shared site-configuration model across local runtime, hosted builds, and Docker overrides.
SITE_NAMEis the app or brand name shown in the UI.SITE_TITLEis the document title used for the browser tab and hosted SEO metadata.SITE_DESCRIPTIONis the description used for manifest metadata and hosted SEO metadata.SITE_URLis the canonical public URL used for hosted metadata generation.SITE_OG_IMAGEis the absolute public URL of the Open Graph image used for hosted sharing metadata.SITE_ROBOTScontrols the hosted robots meta policy, for exampleindex,followornoindex,nofollow.SITE_MENU_ENABLEDcontrols whether the hosted navigation menu, About page, and hosted article pages are available.- Hosted builds inject SEO metadata into
dist/index.htmland can also generaterobots.txtandsitemap.xml. - Hosted builds can also generate
/articulos/plus hosted-only article pages whenSITE_MENU_ENABLED=true. - The self-hosted Docker path stays generic unless you explicitly override it with environment variables.
- The self-hosted Docker path does not ship the hosted navigation or article pages.