feat: minimal AIO hub with chakra grid + bottom dock

The all-in-one app at app.${domain} is a minimal hub: only the base
module (auth, profile, relays, PWA, image upload) plus a chakra-
themed entry point linking out to the seven standalone module PWAs
(market, sortir, wallet, chat, forum, tasks, castle), with an
eighth tile reserved for a forthcoming restaurant module.

UI:
- 2-column grid of 8 module tiles with Lucide icons, occupying the
  full viewport between the title and the bottom dock. Status hints
  (alpha/beta/coming soon) shown beneath each label.
- Faint chakra-mandala column rendered behind the tiles (peeks
  through their translucent backgrounds), plus a subtle vertical
  hue gradient (red at the bottom → violet at the top) — the chakras
  inform the visual frame without forcing a 1:1 module mapping.
- Bottom dock with system-level controls: Profile (Sheet hosting
  the existing ProfileSettings.vue), Theme (light/dark/system),
  Language (uses available locales), and a Currency placeholder.
- Each tile is a link to VITE_HUB_<NAME>_URL with the user's
  lnbits_access_token appended as ?token= so the destination logs
  in via the existing acceptTokenFromUrl() relay.

Wiring:
- src/App.vue: stripped to the same minimal shell as the standalone
  apps (no AppLayout/AppSidebar — the hub is the navigation).
- src/app.ts: only base module is registered. Hub is the / route.
- src/app.config.ts: only base module config remains.
- public/chakras/*.svg: 7 chakra mandala SVGs copied from the legacy
  frontend (Atitlan.io).
- nginx.conf.example: rewritten with one server block per subdomain
  pointing at its own dist-<name>/ output.

Closes #26.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Padreug 2026-05-02 09:04:14 +02:00
commit 9a3e3ae0ed
12 changed files with 1024 additions and 332 deletions

108
public/chakras/anahata.svg Normal file
View file

@ -0,0 +1,108 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="26.373173mm"
height="26.373281mm"
viewBox="0 0 26.373173 26.373281"
version="1.1"
id="svg1911"
inkscape:version="1.2 (dc2aedaf03, 2022-05-15)"
sodipodi:docname="anahata.svg"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview1913"
pagecolor="#ffffff"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:document-units="mm"
showgrid="false"
inkscape:zoom="10.35098"
inkscape:cx="50.671531"
inkscape:cy="50.333398"
inkscape:window-width="2004"
inkscape:window-height="1979"
inkscape:window-x="8"
inkscape:window-y="64"
inkscape:window-maximized="0"
inkscape:current-layer="layer1" />
<defs
id="defs1908" />
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-50.435614,-75.884446)">
<path
d="m 70.582859,88.910626 c 0,3.844713 -3.116439,6.961576 -6.961365,6.961576 -3.844572,0 -6.961364,-3.116863 -6.961364,-6.961576 0,-3.844573 3.116792,-6.961012 6.961364,-6.961012 3.844926,0 6.961365,3.116439 6.961365,6.961012 z"
style="fill:none;stroke:#87c341;stroke-width:0.740833;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:0.2"
id="path966" />
<path
d="m 72.43212,89.07114 c 0,4.016728 -2.689225,7.406146 -6.364464,8.465997 -0.776464,0.224331 -1.597378,0.34424 -2.445809,0.34424 -0.848783,0 -1.668992,-0.119909 -2.445103,-0.34424 -3.67665,-1.059851 -6.366228,-4.449269 -6.366228,-8.465997 0,-4.016728 2.689578,-7.406217 6.366228,-8.465962 0.776111,-0.224367 1.59632,-0.343958 2.445103,-0.343958 0.848431,0 1.669345,0.119591 2.445809,0.343958 3.675239,1.059745 6.364464,4.449234 6.364464,8.465962 z"
style="fill:none;stroke:#87c341;stroke-width:0.740833;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:0.2"
id="path968" />
<path
d="m 61.176392,80.605178 c 0.229305,-2.099028 1.259769,-2.560108 1.61925,-2.911122 0.405694,-0.395464 0.825147,-1.310923 0.825147,-1.310923 0,0 0.419453,0.915459 0.826205,1.310923 0.360892,0.351014 1.391356,0.812094 1.619603,2.911122"
style="fill:none;stroke:#87c341;stroke-width:0.740833;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:0.2"
id="path970" />
<path
d="m 66.068008,97.536996 c -0.229305,2.099028 -1.259769,2.560394 -1.620661,2.911124 -0.407105,0.3955 -0.826558,1.31092 -0.826558,1.31092 0,0 -0.4191,-0.91542 -0.824795,-1.31092 -0.35948,-0.35073 -1.389944,-0.812096 -1.619602,-2.911124"
style="fill:none;stroke:#87c341;stroke-width:0.740833;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:0.2"
id="path972" />
<path
d="m 72.087809,86.625331 c 2.099028,0.229306 2.560461,1.25977 2.911475,1.61925 0.395111,0.405695 1.310922,0.8255 1.310922,0.8255 0,0 -0.915811,0.4191 -1.310922,0.825853 -0.351014,0.360892 -0.812447,1.391356 -2.911475,1.619603"
style="fill:none;stroke:#87c341;stroke-width:0.740833;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:0.2"
id="path974" />
<path
d="m 55.156238,91.516948 c -2.099028,-0.229658 -2.560461,-1.259769 -2.911122,-1.620661 -0.395464,-0.407106 -1.310922,-0.826558 -1.310922,-0.826558 0,0 0.915458,-0.4191 1.310922,-0.824795 0.350661,-0.35948 0.812094,-1.389944 2.911122,-1.619603"
style="fill:none;stroke:#87c341;stroke-width:0.740833;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:0.2"
id="path976" />
<path
d="m 65.843642,80.543795 c 1.269294,-1.687336 2.390775,-1.557867 2.879372,-1.675695 0.550334,-0.132644 1.378656,-0.705555 1.378656,-0.705555 0,0 -0.106892,1.001536 0.04092,1.549047 0.131233,0.485775 0.78105,1.408995 -0.0949,3.32987"
style="fill:none;stroke:#87c341;stroke-width:0.740833;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:0.2"
id="path978" />
<path
d="m 61.400758,97.598591 c -1.269294,1.687406 -2.390775,1.557866 -2.880431,1.675024 -0.551744,0.131868 -1.379714,0.70485 -1.379714,0.70485 0,0 0.106892,-1.001148 -0.03986,-1.548342 -0.130175,-0.485069 -0.779992,-1.408218 0.0949,-3.330187"
style="fill:none;stroke:#87c341;stroke-width:0.740833;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:0.2"
id="path980" />
<path
d="m 69.887534,82.874598 c 1.95333,-0.801864 2.851503,-0.117828 3.33128,0.02999 0.541162,0.167217 1.545873,0.09772 1.545873,0.09772 0,0 -0.603603,0.80645 -0.756003,1.35255 -0.135467,0.484717 -0.04833,1.610431 -1.782586,2.814462"
style="fill:none;stroke:#87c341;stroke-width:0.740833;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:0.2"
id="path982" />
<path
d="m 57.356866,95.267647 c -1.95333,0.802287 -2.851503,0.117827 -3.331986,-0.03101 -0.541514,-0.168239 -1.546225,-0.09906 -1.546225,-0.09906 0,0 0.60325,-0.806167 0.756708,-1.351174 0.13582,-0.483693 0.04868,-1.609407 1.782234,-2.814496"
style="fill:none;stroke:#87c341;stroke-width:0.740833;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:0.2"
id="path984" />
<path
d="m 61.3997,80.543795 c -1.269295,-1.687336 -2.390775,-1.557867 -2.879373,-1.675695 -0.550686,-0.132644 -1.378655,-0.705555 -1.378655,-0.705555 0,0 0.106539,1.001536 -0.04092,1.549047 -0.131587,0.485775 -0.78105,1.408995 0.09454,3.32987"
style="fill:none;stroke:#87c341;stroke-width:0.740833;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:0.2"
id="path986" />
<path
d="m 65.842583,97.598591 c 1.269295,1.687406 2.390776,1.557866 2.880431,1.675024 0.551392,0.131868 1.379714,0.70485 1.379714,0.70485 0,0 -0.106891,-1.001148 0.03986,-1.548342 0.130175,-0.485069 0.779992,-1.408218 -0.0949,-3.330187"
style="fill:none;stroke:#87c341;stroke-width:0.740833;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:0.2"
id="path988" />
<path
d="m 57.355455,82.874598 c -1.952978,-0.801864 -2.85115,-0.117828 -3.330928,0.02999 -0.541161,0.167217 -1.545872,0.09772 -1.545872,0.09772 0,0 0.60325,0.80645 0.756003,1.35255 0.135466,0.484717 0.04798,1.610431 1.782233,2.814462"
style="fill:none;stroke:#87c341;stroke-width:0.740833;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:0.2"
id="path990" />
<path
d="m 69.886475,95.267647 c 1.953331,0.802287 2.851503,0.117827 3.331634,-0.03101 0.541867,-0.168239 1.546578,-0.09906 1.546578,-0.09906 0,0 -0.60325,-0.806167 -0.756709,-1.351174 -0.136172,-0.483693 -0.04868,-1.609407 -1.782233,-2.814496"
style="fill:none;stroke:#87c341;stroke-width:0.740833;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:0.2"
id="path992" />
<path
d="m 64.522489,89.602423 c -0.480836,0.528461 -0.853017,1.052689 -1.546578,1.328561 -0.508706,0.201436 -1.065389,0.146756 -1.488017,-0.20708 -0.303036,-0.253647 -0.572911,-0.877711 -0.286102,-1.224845 0.393347,-0.475544 1.079147,-0.756003 1.531055,-1.19133 0.37077,-0.357717 0.512939,-0.776464 0.578556,-1.264709 0.02293,3.53e-4 0.0448,0.0018 0.06773,0.0018 0.38982,0.0071 0.812447,0.04127 1.243189,0.06844 -0.06667,0.797278 -0.101247,1.636889 -0.08784,2.479675 -0.0039,0.0039 -0.0085,0.0053 -0.01199,0.0095 m 1.954036,-3.34645 c -0.237419,0.153811 -1.046339,0.03916 -1.327855,0.04374 -0.442384,0.0085 -0.884767,0.02046 -1.327503,0.03069 -0.995892,0.02328 -2.02177,0.08819 -2.995437,-0.15628 -0.21343,-0.05362 -0.370416,0.274108 -0.155222,0.367947 0.707672,0.30868 1.389945,0.432153 2.124428,0.479425 -0.491419,1.058686 -1.823861,1.1811 -2.3749,2.121605 -0.426861,0.728487 -0.03916,1.617839 0.466725,2.181578 0.987778,1.101443 2.857147,0.575381 3.702756,-0.525639 0.06526,0.835731 0.187325,1.657139 0.392641,2.424431 0.08255,0.30868 0.527403,0.232198 0.541162,-0.07331 0.08784,-1.95707 -0.119592,-4.038106 -0.269523,-6.007312 0.507648,0.01482 1.008239,-7.05e-4 1.455914,-0.106891 0.177448,-0.04269 0.286456,-0.211667 0.293864,-0.386292 l 0.0035,-0.08925 C 67.018368,86.299019 66.697339,86.113105 66.4765,86.25598"
style="fill:#8ac641;fill-opacity:0.2;fill-rule:nonzero;stroke:#87c341;stroke-width:0.0352778;stroke-opacity:0.2"
id="path994" />
<path
d="m 64.98992,85.116148 c -0.0018,-0.0074 -0.0035,-0.01517 -0.0056,-0.02258 -0.03916,-0.1651 -0.179564,-0.286808 -0.340078,-0.3302 -0.0956,-0.04269 -0.204258,-0.05503 -0.315383,-0.02469 -0.224367,0.06174 -0.327378,0.247297 -0.352778,0.46355 -0.0014,0.01517 -0.0035,0.03034 -0.0053,0.04586 -0.02399,0.205669 0.168275,0.438503 0.364773,0.478719 0.212019,0.04339 0.3683,0.0056 0.529872,-0.140053 0.129822,-0.116769 0.163689,-0.307975 0.124531,-0.470605"
style="fill:#8ac641;fill-opacity:0.2;fill-rule:nonzero;stroke:#87c341;stroke-width:0.0352778;stroke-opacity:0.2"
id="path996" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 9.6 KiB