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

View file

@ -0,0 +1,132 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="26.116741mm"
height="29.412525mm"
viewBox="0 0 26.116741 29.412525"
version="1.1"
id="svg1911"
inkscape:version="1.2 (dc2aedaf03, 2022-05-15)"
sodipodi:docname="sahasrara.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="49.077479"
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.56383,-74.364824)">
<path
d="m 70.582859,88.910538 c 0,3.844713 -3.116439,6.961576 -6.961012,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.844573,0 6.961012,3.116439 6.961012,6.961012 z"
style="fill:none;stroke:#98549c;stroke-width:0.740833;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:0.2"
id="path882" />
<path
d="m 72.432473,89.071052 c 0,4.016728 -2.689578,7.406146 -6.364465,8.465997 -0.776463,0.224331 -1.59773,0.34424 -2.445808,0.34424 -0.849136,0 -1.668992,-0.119909 -2.445809,-0.34424 -3.676297,-1.059851 -6.365522,-4.449269 -6.365522,-8.465997 0,-4.016728 2.689225,-7.406217 6.365522,-8.465962 0.776817,-0.224367 1.596673,-0.343958 2.445809,-0.343958 0.848078,0 1.669345,0.119591 2.445808,0.343958 3.674887,1.059745 6.364465,4.449234 6.364465,8.465962 z"
style="fill:none;stroke:#98549c;stroke-width:0.740833;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:0.2"
id="path884" />
<path
d="m 61.176391,80.60509 c 0.229659,-2.099028 1.25977,-2.560108 1.619603,-2.911122 0.405342,-0.395464 0.825148,-1.310923 0.825148,-1.310923 0,0 0.419452,0.915459 0.825852,1.310923 0.361245,0.351014 1.391709,0.812094 1.619603,2.911122"
style="fill:none;stroke:#98549c;stroke-width:0.740833;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:0.2"
id="path886" />
<path
d="m 66.068008,97.536908 c -0.229305,2.099028 -1.259769,2.560392 -1.621014,2.911122 -0.4064,0.3955 -0.826205,1.31092 -0.826205,1.31092 0,0 -0.419453,-0.91542 -0.824795,-1.31092 -0.359833,-0.35073 -1.389944,-0.812094 -1.619603,-2.911122"
style="fill:none;stroke:#98549c;stroke-width:0.740833;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:0.2"
id="path888" />
<path
d="m 72.088162,86.625243 c 2.099028,0.229306 2.560814,1.25977 2.911122,1.61925 0.395464,0.405695 1.310922,0.8255 1.310922,0.8255 0,0 -0.915458,0.4191 -1.310922,0.825853 -0.350308,0.360892 -0.812094,1.391356 -2.911122,1.619603"
style="fill:none;stroke:#98549c;stroke-width:0.740833;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:0.2"
id="path890" />
<path
d="m 55.156238,91.51686 c -2.099028,-0.229658 -2.560108,-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.351014,-0.35948 0.812094,-1.389944 2.911122,-1.619603"
style="fill:none;stroke:#98549c;stroke-width:0.740833;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:0.2"
id="path892" />
<path
d="m 65.843642,80.543707 c 1.269647,-1.687336 2.390775,-1.557867 2.879019,-1.675695 0.551039,-0.132644 1.379009,-0.705555 1.379009,-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:#98549c;stroke-width:0.740833;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:0.2"
id="path894" />
<path
d="m 61.400758,97.598503 c -1.269294,1.687406 -2.390775,1.557866 -2.880078,1.675024 -0.551744,0.131868 -1.380067,0.70485 -1.380067,0.70485 0,0 0.106892,-1.001148 -0.03951,-1.548342 -0.130175,-0.485069 -0.780344,-1.408218 0.09454,-3.330187"
style="fill:none;stroke:#98549c;stroke-width:0.740833;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:0.2"
id="path896" />
<path
d="m 69.887534,82.87451 c 1.952978,-0.801864 2.85115,-0.117828 3.330928,0.02999 0.541514,0.167217 1.545872,0.09772 1.545872,0.09772 0,0 -0.60325,0.80645 -0.75565,1.35255 -0.135467,0.484717 -0.04833,1.610431 -1.782586,2.814462"
style="fill:none;stroke:#98549c;stroke-width:0.740833;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:0.2"
id="path898" />
<path
d="m 57.356866,95.267559 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:#98549c;stroke-width:0.740833;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:0.2"
id="path900" />
<path
d="m 61.3997,80.543707 c -1.269647,-1.687336 -2.391128,-1.557867 -2.879373,-1.675695 -0.550333,-0.132644 -1.378655,-0.705555 -1.378655,-0.705555 0,0 0.106891,1.001536 -0.04092,1.549047 -0.131234,0.485775 -0.78105,1.408995 0.0949,3.32987"
style="fill:none;stroke:#98549c;stroke-width:0.740833;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:0.2"
id="path902" />
<path
d="m 65.842231,97.598503 c 1.27,1.687406 2.391128,1.557866 2.880783,1.675024 0.551392,0.131868 1.379714,0.70485 1.379714,0.70485 0,0 -0.107244,-1.001148 0.03951,-1.548342 0.130528,-0.485069 0.779992,-1.408218 -0.09454,-3.330187"
style="fill:none;stroke:#98549c;stroke-width:0.740833;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:0.2"
id="path904" />
<path
d="m 57.355455,82.87451 c -1.952978,-0.801864 -2.85115,-0.117828 -3.330575,0.02999 -0.541161,0.167217 -1.546225,0.09772 -1.546225,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:#98549c;stroke-width:0.740833;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:0.2"
id="path906" />
<path
d="m 69.886475,95.267559 c 1.952978,0.802287 2.851151,0.117827 3.331634,-0.03101 0.541514,-0.168239 1.546225,-0.09906 1.546225,-0.09906 0,0 -0.60325,-0.806167 -0.756356,-1.351174 -0.136172,-0.483693 -0.04868,-1.609407 -1.782233,-2.814496"
style="fill:none;stroke:#98549c;stroke-width:0.740833;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:0.2"
id="path908" />
<path
d="m 58.557369,80.510193 h -0.0092 c 7.05e-4,-3.240617 2.563283,-3.846689 3.391253,-4.294011 0.828675,-0.446617 1.68275,-1.480962 1.68275,-1.480962 0,0 0.854075,1.034345 1.68275,1.480962 0.82797,0.447322 3.390548,1.053394 3.391253,4.294011 h -0.0092"
style="fill:none;stroke:#98549c;stroke-width:0.740833;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:0.2"
id="path910" />
<path
d="m 68.687031,97.631981 h 0.0092 c -7.05e-4,3.240189 -2.563283,3.846689 -3.391253,4.293979 -0.828675,0.44661 -1.682397,1.48099 -1.682397,1.48099 0,0 -0.854428,-1.03438 -1.683103,-1.48099 -0.82797,-0.44729 -3.390548,-1.05379 -3.391253,-4.293979 h 0.0092"
style="fill:none;stroke:#98549c;stroke-width:0.740833;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:0.2"
id="path912" />
<path
d="m 68.71102,80.524304 -0.0046,-0.0081 c 2.8448,-1.551517 4.604455,0.407811 5.393619,0.919692 0.789164,0.513644 2.106084,0.768703 2.106084,0.768703 0,0 -0.498475,1.244953 -0.493536,2.185811 0.0032,0.878769 0.609953,3.152422 -1.626306,4.71417"
style="fill:none;stroke:#98549c;stroke-width:0.740833;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:0.2"
id="path914" />
<path
d="m 58.533733,97.6178 0.0046,0.0081 c -2.8448,1.551516 -4.604809,-0.407494 -5.393972,-0.920009 -0.789164,-0.513292 -2.106084,-0.768104 -2.106084,-0.768104 0,0 0.498828,-1.245199 0.493889,-2.186128 -0.0035,-0.873125 -0.602192,-3.121731 1.58115,-4.682067"
style="fill:none;stroke:#98549c;stroke-width:0.740833;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:0.2"
id="path916" />
<path
d="m 58.533733,80.524304 0.0046,-0.0081 c -2.8448,-1.551517 -4.604809,0.407811 -5.393972,0.919692 -0.789164,0.513644 -2.106084,0.768703 -2.106084,0.768703 0,0 0.498828,1.244953 0.493889,2.185811 -0.0035,0.873831 -0.602897,3.125258 1.586089,4.685947"
style="fill:none;stroke:#98549c;stroke-width:0.740833;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:0.2"
id="path918" />
<path
d="m 68.71102,97.6178 -0.0046,0.0081 c 2.8448,1.551516 4.604455,-0.407494 5.393619,-0.920009 0.789164,-0.513292 2.106084,-0.768104 2.106084,-0.768104 0,0 -0.498475,-1.245199 -0.493536,-2.186128 0.0032,-0.874219 0.60325,-3.127376 -1.589264,-4.688065"
style="fill:none;stroke:#98549c;stroke-width:0.740833;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:0.2"
id="path920" />
<path
d="m 66.337178,88.267071 c -0.274108,-0.07479 -0.543983,-0.07726 -0.801864,-0.02505 0.02364,-0.03493 0.05045,-0.06773 0.07585,-0.101247 0.23107,-0.112184 0.439561,-0.303742 0.595489,-0.60325 0.161925,-0.310798 -0.191558,-0.769056 -0.523875,-0.524228 -0.258939,0.1905 -0.470253,0.405342 -0.651933,0.639233 -0.448734,-0.04621 -1.038578,-0.651228 -1.121834,-0.946503 -0.06385,-0.226483 -0.447675,-0.190147 -0.422275,0.05715 0.07056,0.688975 0.5969,1.241778 1.18992,1.428045 -0.15487,0.276225 -0.287514,0.570794 -0.417689,0.879475 -0.155575,0.370417 0.389467,0.62477 0.640997,0.373239 0.26917,-0.269522 1.259417,-1.011767 1.341967,0.03316 0.04868,0.381353 -0.06668,0.729192 -0.34537,1.043164 -0.408869,0.307269 -1.066094,0.210256 -1.328914,-0.274108 -0.127,-0.234598 -0.430036,-0.174978 -0.538338,0.02046 -0.177095,-0.479072 -0.499887,-0.787753 -0.916164,-0.983192 0.542219,-0.421217 0.769408,-1.038931 0.201083,-1.738842 -0.327731,-0.403225 -0.923925,-0.500239 -1.387828,-0.358775 -0.440619,0.134409 -0.545042,0.722842 -0.767644,1.056217 -0.109009,0.163336 0.10548,0.371475 0.267758,0.267406 0.138289,-0.08819 0.279753,-0.174625 0.373592,-0.314678 0.171097,-0.336903 0.493536,-0.445206 0.967669,-0.325261 0.08396,0.236008 0.167922,0.472016 0.251883,0.708025 -0.212019,0.252589 -0.478719,0.411691 -0.799747,0.476602 -0.281164,0.09243 -0.329141,0.550334 0,0.617009 0.417689,0.08502 0.773995,0.176389 1.046339,0.548569 0.559153,0.764823 -0.481542,0.936978 -0.828675,0.976842 -0.732719,0.08396 -1.323975,-0.573617 -1.422047,-1.217789 -0.04163,-0.274461 -0.454025,-0.29845 -0.574322,-0.07514 -0.318206,0.592314 0.0032,1.233664 0.552802,1.573037 0.724606,0.446264 1.405114,0.573616 2.223559,0.300919 0.402167,-0.134055 0.75953,-0.501297 0.858661,-0.923572 0.197203,0.428978 0.699911,0.6604 1.223786,0.563386 0.775759,-0.144286 1.339145,-0.542925 1.55575,-1.320095 0.136525,-0.491772 0.143934,-1.649589 -0.518583,-1.830211"
style="fill:#98549c;fill-opacity:0.2;fill-rule:nonzero;stroke:#98549c;stroke-width:0.0352778;stroke-opacity:0.2"
id="path922" />
<path
d="m 64.621972,86.221666 c -0.540455,0 -0.540455,0.837847 0,0.837847 0.540456,0 0.540456,-0.837847 0,-0.837847"
style="fill:#98549c;fill-opacity:0.2;fill-rule:nonzero;stroke:#98549c;stroke-width:0.0352778;stroke-opacity:0.2"
id="path924" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 12 KiB