diff --git a/Makefile b/Makefile
index 5d365e3..f4e9c05 100644
--- a/Makefile
+++ b/Makefile
@@ -83,6 +83,6 @@ generate-svg-variants:
@echo "SVG variants have been generated"
# Generate PWA cache list
-pwa-cache-list:
+generate-pwa-cache-list:
@echo "Generating PWA cache list..."
$(DOCKER_COMPOSE) -f compose.dev.yml run --rm $(CONTAINER_NAME) npm run pwa-cache-list
diff --git a/public/data/emblems.json b/public/data/emblems.json
index 36162a5..7690e33 100644
--- a/public/data/emblems.json
+++ b/public/data/emblems.json
@@ -3,6 +3,15 @@
"name": "Escudo De España",
"path": "Escudo_de_España.svg",
"format": "SVG",
- "disable": false
+ "disable": false,
+ "tags": [
+ "Spain",
+ "Coat of arms",
+ "National emblem"
+ ],
+ "meta": {
+ "description": "The coat of arms of Spain, representing the historical kingdoms and the Pillars of Hercules.",
+ "wikipedia": "https://en.wikipedia.org/wiki/Coat_of_arms_of_Spain"
+ }
}
-]
\ No newline at end of file
+]
diff --git a/public/images/pwa-files-to-cache.json b/public/images/pwa-files-to-cache.json
deleted file mode 100644
index b9ad7d5..0000000
--- a/public/images/pwa-files-to-cache.json
+++ /dev/null
@@ -1,1533 +0,0 @@
-[
- "/flags/ad.svg",
- "/flags/ae.svg",
- "/flags/af.svg",
- "/flags/ag.svg",
- "/flags/ai.svg",
- "/flags/al.svg",
- "/flags/am.svg",
- "/flags/ao.svg",
- "/flags/aq.svg",
- "/flags/ar.svg",
- "/flags/arab.svg",
- "/flags/as.svg",
- "/flags/asean.svg",
- "/flags/at.svg",
- "/flags/au.svg",
- "/flags/aw.svg",
- "/flags/ax.svg",
- "/flags/az.svg",
- "/flags/ba.svg",
- "/flags/bb.svg",
- "/flags/bd.svg",
- "/flags/be.svg",
- "/flags/bf.svg",
- "/flags/bg.svg",
- "/flags/bh.svg",
- "/flags/bi.svg",
- "/flags/bj.svg",
- "/flags/bl.svg",
- "/flags/bm.svg",
- "/flags/bn.svg",
- "/flags/bo.svg",
- "/flags/bq.svg",
- "/flags/br.svg",
- "/flags/bs.svg",
- "/flags/bt.svg",
- "/flags/bv.svg",
- "/flags/bw.svg",
- "/flags/by.svg",
- "/flags/bz.svg",
- "/flags/ca.svg",
- "/flags/cc.svg",
- "/flags/cd.svg",
- "/flags/cefta.svg",
- "/flags/cf.svg",
- "/flags/cg.svg",
- "/flags/ch.svg",
- "/flags/ci.svg",
- "/flags/ck.svg",
- "/flags/cl.svg",
- "/flags/cm.svg",
- "/flags/cn.svg",
- "/flags/co.svg",
- "/flags/cp.svg",
- "/flags/cr.svg",
- "/flags/cu.svg",
- "/flags/cv.svg",
- "/flags/cw.svg",
- "/flags/cx.svg",
- "/flags/cy.svg",
- "/flags/cz.svg",
- "/flags/de.svg",
- "/flags/dg.svg",
- "/flags/dj.svg",
- "/flags/dk.svg",
- "/flags/dm.svg",
- "/flags/do.svg",
- "/flags/dz.svg",
- "/flags/eac.svg",
- "/flags/ec.svg",
- "/flags/ee.svg",
- "/flags/eg.svg",
- "/flags/eh.svg",
- "/flags/er.svg",
- "/flags/es-ct.svg",
- "/flags/es-ga.svg",
- "/flags/es-pv.svg",
- "/flags/es.svg",
- "/flags/et.svg",
- "/flags/eu.svg",
- "/flags/fi.svg",
- "/flags/fj.svg",
- "/flags/fk.svg",
- "/flags/fm.svg",
- "/flags/fo.svg",
- "/flags/fr.svg",
- "/flags/ga.svg",
- "/flags/gb-eng.svg",
- "/flags/gb-nir.svg",
- "/flags/gb-sct.svg",
- "/flags/gb-wls.svg",
- "/flags/gb.svg",
- "/flags/gd.svg",
- "/flags/ge.svg",
- "/flags/gf.svg",
- "/flags/gg.svg",
- "/flags/gh.svg",
- "/flags/gi.svg",
- "/flags/gl.svg",
- "/flags/gm.svg",
- "/flags/gn.svg",
- "/flags/gp.svg",
- "/flags/gq.svg",
- "/flags/gr.svg",
- "/flags/gs.svg",
- "/flags/gt.svg",
- "/flags/gu.svg",
- "/flags/gw.svg",
- "/flags/gy.svg",
- "/flags/hk.svg",
- "/flags/hm.svg",
- "/flags/hn.svg",
- "/flags/hr.svg",
- "/flags/ht.svg",
- "/flags/hu.svg",
- "/flags/ic.svg",
- "/flags/id.svg",
- "/flags/ie.svg",
- "/flags/il.svg",
- "/flags/im.svg",
- "/flags/in.svg",
- "/flags/io.svg",
- "/flags/iq.svg",
- "/flags/ir.svg",
- "/flags/is.svg",
- "/flags/it.svg",
- "/flags/je.svg",
- "/flags/jm.svg",
- "/flags/jo.svg",
- "/flags/jp.svg",
- "/flags/ke.svg",
- "/flags/kg.svg",
- "/flags/kh.svg",
- "/flags/ki.svg",
- "/flags/km.svg",
- "/flags/kn.svg",
- "/flags/kp.svg",
- "/flags/kr.svg",
- "/flags/kw.svg",
- "/flags/ky.svg",
- "/flags/kz.svg",
- "/flags/la.svg",
- "/flags/lb.svg",
- "/flags/lc.svg",
- "/flags/li.svg",
- "/flags/lk.svg",
- "/flags/lr.svg",
- "/flags/ls.svg",
- "/flags/lt.svg",
- "/flags/lu.svg",
- "/flags/lv.svg",
- "/flags/ly.svg",
- "/flags/ma.svg",
- "/flags/mc.svg",
- "/flags/md-Chisinau.svg",
- "/flags/md.svg",
- "/flags/me.svg",
- "/flags/mf.svg",
- "/flags/mg.svg",
- "/flags/mh.svg",
- "/flags/mk.svg",
- "/flags/ml.svg",
- "/flags/mm.svg",
- "/flags/mn.svg",
- "/flags/mo.svg",
- "/flags/mp.svg",
- "/flags/mq.svg",
- "/flags/mr.svg",
- "/flags/ms.svg",
- "/flags/mt.svg",
- "/flags/mu.svg",
- "/flags/mv.svg",
- "/flags/mw.svg",
- "/flags/mx.svg",
- "/flags/my.svg",
- "/flags/mz.svg",
- "/flags/na.svg",
- "/flags/nc.svg",
- "/flags/ne.svg",
- "/flags/nf.svg",
- "/flags/ng.svg",
- "/flags/ni.svg",
- "/flags/nl.svg",
- "/flags/no.svg",
- "/flags/np.svg",
- "/flags/nr.svg",
- "/flags/nu.svg",
- "/flags/nz.svg",
- "/flags/om.svg",
- "/flags/pa.svg",
- "/flags/pc.svg",
- "/flags/pe.svg",
- "/flags/pf.svg",
- "/flags/pg.svg",
- "/flags/ph.svg",
- "/flags/pk.svg",
- "/flags/pl.svg",
- "/flags/pm.svg",
- "/flags/pn.svg",
- "/flags/pr.svg",
- "/flags/ps.svg",
- "/flags/pt.svg",
- "/flags/pw.svg",
- "/flags/py.svg",
- "/flags/qa.svg",
- "/flags/re.svg",
- "/flags/ro.svg",
- "/flags/rs.svg",
- "/flags/rw.svg",
- "/flags/sa.svg",
- "/flags/sb.svg",
- "/flags/sc.svg",
- "/flags/sd.svg",
- "/flags/se.svg",
- "/flags/sg.svg",
- "/flags/sh-ac.svg",
- "/flags/sh-hl.svg",
- "/flags/sh-ta.svg",
- "/flags/si.svg",
- "/flags/sj.svg",
- "/flags/sk.svg",
- "/flags/sl.svg",
- "/flags/sm.svg",
- "/flags/sn.svg",
- "/flags/so.svg",
- "/flags/sr.svg",
- "/flags/ss.svg",
- "/flags/st.svg",
- "/flags/sv.svg",
- "/flags/sx.svg",
- "/flags/sy.svg",
- "/flags/sz.svg",
- "/flags/tc.svg",
- "/flags/td.svg",
- "/flags/tf.svg",
- "/flags/tg.svg",
- "/flags/th.svg",
- "/flags/tj.svg",
- "/flags/tk.svg",
- "/flags/tl.svg",
- "/flags/tm.svg",
- "/flags/tn.svg",
- "/flags/to.svg",
- "/flags/tr.svg",
- "/flags/tt.svg",
- "/flags/tv.svg",
- "/flags/tw.svg",
- "/flags/tz.svg",
- "/flags/ua-BilaCerkva.svg",
- "/flags/ua-Cherkasy.svg",
- "/flags/ua-Chernihiv.svg",
- "/flags/ua-IvanoFrankivsk.svg",
- "/flags/ua-Kyiv.svg",
- "/flags/ua-Lutsk.svg",
- "/flags/ua-Lviv.svg",
- "/flags/ua-Rivne.svg",
- "/flags/ua-Ternopil.svg",
- "/flags/ua-Uzhhorod.svg",
- "/flags/ua-Vinnycia.svg",
- "/flags/ua-Zhytomyr.svg",
- "/flags/ua.svg",
- "/flags/ug.svg",
- "/flags/um.svg",
- "/flags/un.svg",
- "/flags/us.svg",
- "/flags/uy.svg",
- "/flags/uz.svg",
- "/flags/va.svg",
- "/flags/vc.svg",
- "/flags/ve.svg",
- "/flags/vg.svg",
- "/flags/vi.svg",
- "/flags/vn.svg",
- "/flags/vu.svg",
- "/flags/wf.svg",
- "/flags/ws.svg",
- "/flags/xk.svg",
- "/flags/ye.svg",
- "/flags/yt.svg",
- "/flags/za.svg",
- "/flags/zm.svg",
- "/flags/zw.svg",
- "/flags_variants/ad.jpg",
- "/flags_variants/ad.png",
- "/flags_variants/ae.jpg",
- "/flags_variants/ae.png",
- "/flags_variants/af.jpg",
- "/flags_variants/af.png",
- "/flags_variants/ag.jpg",
- "/flags_variants/ag.png",
- "/flags_variants/ai.jpg",
- "/flags_variants/ai.png",
- "/flags_variants/al.jpg",
- "/flags_variants/al.png",
- "/flags_variants/am.jpg",
- "/flags_variants/am.png",
- "/flags_variants/ao.jpg",
- "/flags_variants/ao.png",
- "/flags_variants/aq.jpg",
- "/flags_variants/aq.png",
- "/flags_variants/ar.jpg",
- "/flags_variants/ar.png",
- "/flags_variants/arab.jpg",
- "/flags_variants/arab.png",
- "/flags_variants/as.jpg",
- "/flags_variants/as.png",
- "/flags_variants/asean.jpg",
- "/flags_variants/asean.png",
- "/flags_variants/at.jpg",
- "/flags_variants/at.png",
- "/flags_variants/au.jpg",
- "/flags_variants/au.png",
- "/flags_variants/aw.jpg",
- "/flags_variants/aw.png",
- "/flags_variants/ax.jpg",
- "/flags_variants/ax.png",
- "/flags_variants/az.jpg",
- "/flags_variants/az.png",
- "/flags_variants/ba.jpg",
- "/flags_variants/ba.png",
- "/flags_variants/bb.jpg",
- "/flags_variants/bb.png",
- "/flags_variants/bd.jpg",
- "/flags_variants/bd.png",
- "/flags_variants/be.jpg",
- "/flags_variants/be.png",
- "/flags_variants/bf.jpg",
- "/flags_variants/bf.png",
- "/flags_variants/bg.jpg",
- "/flags_variants/bg.png",
- "/flags_variants/bh.jpg",
- "/flags_variants/bh.png",
- "/flags_variants/bi.jpg",
- "/flags_variants/bi.png",
- "/flags_variants/bj.jpg",
- "/flags_variants/bj.png",
- "/flags_variants/bl.jpg",
- "/flags_variants/bl.png",
- "/flags_variants/bm.jpg",
- "/flags_variants/bm.png",
- "/flags_variants/bn.jpg",
- "/flags_variants/bn.png",
- "/flags_variants/bo.jpg",
- "/flags_variants/bo.png",
- "/flags_variants/bq.jpg",
- "/flags_variants/bq.png",
- "/flags_variants/br.jpg",
- "/flags_variants/br.png",
- "/flags_variants/bs.jpg",
- "/flags_variants/bs.png",
- "/flags_variants/bt.jpg",
- "/flags_variants/bt.png",
- "/flags_variants/bv.jpg",
- "/flags_variants/bv.png",
- "/flags_variants/bw.jpg",
- "/flags_variants/bw.png",
- "/flags_variants/by.jpg",
- "/flags_variants/by.png",
- "/flags_variants/bz.jpg",
- "/flags_variants/bz.png",
- "/flags_variants/ca.jpg",
- "/flags_variants/ca.png",
- "/flags_variants/cc.jpg",
- "/flags_variants/cc.png",
- "/flags_variants/cd.jpg",
- "/flags_variants/cd.png",
- "/flags_variants/cefta.jpg",
- "/flags_variants/cefta.png",
- "/flags_variants/cf.jpg",
- "/flags_variants/cf.png",
- "/flags_variants/cg.jpg",
- "/flags_variants/cg.png",
- "/flags_variants/ch.jpg",
- "/flags_variants/ch.png",
- "/flags_variants/ci.jpg",
- "/flags_variants/ci.png",
- "/flags_variants/ck.jpg",
- "/flags_variants/ck.png",
- "/flags_variants/cl.jpg",
- "/flags_variants/cl.png",
- "/flags_variants/cm.jpg",
- "/flags_variants/cm.png",
- "/flags_variants/cn.jpg",
- "/flags_variants/cn.png",
- "/flags_variants/co.jpg",
- "/flags_variants/co.png",
- "/flags_variants/cp.jpg",
- "/flags_variants/cp.png",
- "/flags_variants/cr.jpg",
- "/flags_variants/cr.png",
- "/flags_variants/cu.jpg",
- "/flags_variants/cu.png",
- "/flags_variants/cv.jpg",
- "/flags_variants/cv.png",
- "/flags_variants/cw.jpg",
- "/flags_variants/cw.png",
- "/flags_variants/cx.jpg",
- "/flags_variants/cx.png",
- "/flags_variants/cy.jpg",
- "/flags_variants/cy.png",
- "/flags_variants/cz.jpg",
- "/flags_variants/cz.png",
- "/flags_variants/de.jpg",
- "/flags_variants/de.png",
- "/flags_variants/dg.jpg",
- "/flags_variants/dg.png",
- "/flags_variants/dj.jpg",
- "/flags_variants/dj.png",
- "/flags_variants/dk.jpg",
- "/flags_variants/dk.png",
- "/flags_variants/dm.jpg",
- "/flags_variants/dm.png",
- "/flags_variants/do.jpg",
- "/flags_variants/do.png",
- "/flags_variants/dz.jpg",
- "/flags_variants/dz.png",
- "/flags_variants/eac.jpg",
- "/flags_variants/eac.png",
- "/flags_variants/ec.jpg",
- "/flags_variants/ec.png",
- "/flags_variants/ee.jpg",
- "/flags_variants/ee.png",
- "/flags_variants/eg.jpg",
- "/flags_variants/eg.png",
- "/flags_variants/eh.jpg",
- "/flags_variants/eh.png",
- "/flags_variants/er.jpg",
- "/flags_variants/er.png",
- "/flags_variants/es-ct.jpg",
- "/flags_variants/es-ct.png",
- "/flags_variants/es-ga.jpg",
- "/flags_variants/es-ga.png",
- "/flags_variants/es-pv.jpg",
- "/flags_variants/es-pv.png",
- "/flags_variants/es.jpg",
- "/flags_variants/es.png",
- "/flags_variants/et.jpg",
- "/flags_variants/et.png",
- "/flags_variants/eu.jpg",
- "/flags_variants/eu.png",
- "/flags_variants/fi.jpg",
- "/flags_variants/fi.png",
- "/flags_variants/fj.jpg",
- "/flags_variants/fj.png",
- "/flags_variants/fk.jpg",
- "/flags_variants/fk.png",
- "/flags_variants/fm.jpg",
- "/flags_variants/fm.png",
- "/flags_variants/fo.jpg",
- "/flags_variants/fo.png",
- "/flags_variants/fr.jpg",
- "/flags_variants/fr.png",
- "/flags_variants/ga.jpg",
- "/flags_variants/ga.png",
- "/flags_variants/gb-eng.jpg",
- "/flags_variants/gb-eng.png",
- "/flags_variants/gb-nir.jpg",
- "/flags_variants/gb-nir.png",
- "/flags_variants/gb-sct.jpg",
- "/flags_variants/gb-sct.png",
- "/flags_variants/gb-wls.jpg",
- "/flags_variants/gb-wls.png",
- "/flags_variants/gb.jpg",
- "/flags_variants/gb.png",
- "/flags_variants/gd.jpg",
- "/flags_variants/gd.png",
- "/flags_variants/ge.jpg",
- "/flags_variants/ge.png",
- "/flags_variants/gf.jpg",
- "/flags_variants/gf.png",
- "/flags_variants/gg.jpg",
- "/flags_variants/gg.png",
- "/flags_variants/gh.jpg",
- "/flags_variants/gh.png",
- "/flags_variants/gi.jpg",
- "/flags_variants/gi.png",
- "/flags_variants/gl.jpg",
- "/flags_variants/gl.png",
- "/flags_variants/gm.jpg",
- "/flags_variants/gm.png",
- "/flags_variants/gn.jpg",
- "/flags_variants/gn.png",
- "/flags_variants/gp.jpg",
- "/flags_variants/gp.png",
- "/flags_variants/gq.jpg",
- "/flags_variants/gq.png",
- "/flags_variants/gr.jpg",
- "/flags_variants/gr.png",
- "/flags_variants/gs.jpg",
- "/flags_variants/gs.png",
- "/flags_variants/gt.jpg",
- "/flags_variants/gt.png",
- "/flags_variants/gu.jpg",
- "/flags_variants/gu.png",
- "/flags_variants/gw.jpg",
- "/flags_variants/gw.png",
- "/flags_variants/gy.jpg",
- "/flags_variants/gy.png",
- "/flags_variants/hk.jpg",
- "/flags_variants/hk.png",
- "/flags_variants/hm.jpg",
- "/flags_variants/hm.png",
- "/flags_variants/hn.jpg",
- "/flags_variants/hn.png",
- "/flags_variants/hr.jpg",
- "/flags_variants/hr.png",
- "/flags_variants/ht.jpg",
- "/flags_variants/ht.png",
- "/flags_variants/hu.jpg",
- "/flags_variants/hu.png",
- "/flags_variants/ic.jpg",
- "/flags_variants/ic.png",
- "/flags_variants/id.jpg",
- "/flags_variants/id.png",
- "/flags_variants/ie.jpg",
- "/flags_variants/ie.png",
- "/flags_variants/il.jpg",
- "/flags_variants/il.png",
- "/flags_variants/im.jpg",
- "/flags_variants/im.png",
- "/flags_variants/in.jpg",
- "/flags_variants/in.png",
- "/flags_variants/io.jpg",
- "/flags_variants/io.png",
- "/flags_variants/iq.jpg",
- "/flags_variants/iq.png",
- "/flags_variants/ir.jpg",
- "/flags_variants/ir.png",
- "/flags_variants/is.jpg",
- "/flags_variants/is.png",
- "/flags_variants/it.jpg",
- "/flags_variants/it.png",
- "/flags_variants/je.jpg",
- "/flags_variants/je.png",
- "/flags_variants/jm.jpg",
- "/flags_variants/jm.png",
- "/flags_variants/jo.jpg",
- "/flags_variants/jo.png",
- "/flags_variants/jp.jpg",
- "/flags_variants/jp.png",
- "/flags_variants/ke.jpg",
- "/flags_variants/ke.png",
- "/flags_variants/kg.jpg",
- "/flags_variants/kg.png",
- "/flags_variants/kh.jpg",
- "/flags_variants/kh.png",
- "/flags_variants/ki.jpg",
- "/flags_variants/ki.png",
- "/flags_variants/km.jpg",
- "/flags_variants/km.png",
- "/flags_variants/kn.jpg",
- "/flags_variants/kn.png",
- "/flags_variants/kp.jpg",
- "/flags_variants/kp.png",
- "/flags_variants/kr.jpg",
- "/flags_variants/kr.png",
- "/flags_variants/kw.jpg",
- "/flags_variants/kw.png",
- "/flags_variants/ky.jpg",
- "/flags_variants/ky.png",
- "/flags_variants/kz.jpg",
- "/flags_variants/kz.png",
- "/flags_variants/la.jpg",
- "/flags_variants/la.png",
- "/flags_variants/lb.jpg",
- "/flags_variants/lb.png",
- "/flags_variants/lc.jpg",
- "/flags_variants/lc.png",
- "/flags_variants/li.jpg",
- "/flags_variants/li.png",
- "/flags_variants/lk.jpg",
- "/flags_variants/lk.png",
- "/flags_variants/lr.jpg",
- "/flags_variants/lr.png",
- "/flags_variants/ls.jpg",
- "/flags_variants/ls.png",
- "/flags_variants/lt.jpg",
- "/flags_variants/lt.png",
- "/flags_variants/lu.jpg",
- "/flags_variants/lu.png",
- "/flags_variants/lv.jpg",
- "/flags_variants/lv.png",
- "/flags_variants/ly.jpg",
- "/flags_variants/ly.png",
- "/flags_variants/ma.jpg",
- "/flags_variants/ma.png",
- "/flags_variants/mc.jpg",
- "/flags_variants/mc.png",
- "/flags_variants/md-Chisinau.jpg",
- "/flags_variants/md-Chisinau.png",
- "/flags_variants/md.jpg",
- "/flags_variants/md.png",
- "/flags_variants/me.jpg",
- "/flags_variants/me.png",
- "/flags_variants/mf.jpg",
- "/flags_variants/mf.png",
- "/flags_variants/mg.jpg",
- "/flags_variants/mg.png",
- "/flags_variants/mh.jpg",
- "/flags_variants/mh.png",
- "/flags_variants/mk.jpg",
- "/flags_variants/mk.png",
- "/flags_variants/ml.jpg",
- "/flags_variants/ml.png",
- "/flags_variants/mm.jpg",
- "/flags_variants/mm.png",
- "/flags_variants/mn.jpg",
- "/flags_variants/mn.png",
- "/flags_variants/mo.jpg",
- "/flags_variants/mo.png",
- "/flags_variants/mp.jpg",
- "/flags_variants/mp.png",
- "/flags_variants/mq.jpg",
- "/flags_variants/mq.png",
- "/flags_variants/mr.jpg",
- "/flags_variants/mr.png",
- "/flags_variants/ms.jpg",
- "/flags_variants/ms.png",
- "/flags_variants/mt.jpg",
- "/flags_variants/mt.png",
- "/flags_variants/mu.jpg",
- "/flags_variants/mu.png",
- "/flags_variants/mv.jpg",
- "/flags_variants/mv.png",
- "/flags_variants/mw.jpg",
- "/flags_variants/mw.png",
- "/flags_variants/mx.jpg",
- "/flags_variants/mx.png",
- "/flags_variants/my.jpg",
- "/flags_variants/my.png",
- "/flags_variants/mz.jpg",
- "/flags_variants/mz.png",
- "/flags_variants/na.jpg",
- "/flags_variants/na.png",
- "/flags_variants/nc.jpg",
- "/flags_variants/nc.png",
- "/flags_variants/ne.jpg",
- "/flags_variants/ne.png",
- "/flags_variants/nf.jpg",
- "/flags_variants/nf.png",
- "/flags_variants/ng.jpg",
- "/flags_variants/ng.png",
- "/flags_variants/ni.jpg",
- "/flags_variants/ni.png",
- "/flags_variants/nl.jpg",
- "/flags_variants/nl.png",
- "/flags_variants/no.jpg",
- "/flags_variants/no.png",
- "/flags_variants/np.jpg",
- "/flags_variants/np.png",
- "/flags_variants/nr.jpg",
- "/flags_variants/nr.png",
- "/flags_variants/nu.jpg",
- "/flags_variants/nu.png",
- "/flags_variants/nz.jpg",
- "/flags_variants/nz.png",
- "/flags_variants/om.jpg",
- "/flags_variants/om.png",
- "/flags_variants/pa.jpg",
- "/flags_variants/pa.png",
- "/flags_variants/pc.jpg",
- "/flags_variants/pc.png",
- "/flags_variants/pe.jpg",
- "/flags_variants/pe.png",
- "/flags_variants/pf.jpg",
- "/flags_variants/pf.png",
- "/flags_variants/pg.jpg",
- "/flags_variants/pg.png",
- "/flags_variants/ph.jpg",
- "/flags_variants/ph.png",
- "/flags_variants/pk.jpg",
- "/flags_variants/pk.png",
- "/flags_variants/pl.jpg",
- "/flags_variants/pl.png",
- "/flags_variants/pm.jpg",
- "/flags_variants/pm.png",
- "/flags_variants/pn.jpg",
- "/flags_variants/pn.png",
- "/flags_variants/pr.jpg",
- "/flags_variants/pr.png",
- "/flags_variants/ps.jpg",
- "/flags_variants/ps.png",
- "/flags_variants/pt.jpg",
- "/flags_variants/pt.png",
- "/flags_variants/pw.jpg",
- "/flags_variants/pw.png",
- "/flags_variants/py.jpg",
- "/flags_variants/py.png",
- "/flags_variants/qa.jpg",
- "/flags_variants/qa.png",
- "/flags_variants/re.jpg",
- "/flags_variants/re.png",
- "/flags_variants/ro.jpg",
- "/flags_variants/ro.png",
- "/flags_variants/rs.jpg",
- "/flags_variants/rs.png",
- "/flags_variants/rw.jpg",
- "/flags_variants/rw.png",
- "/flags_variants/sa.jpg",
- "/flags_variants/sa.png",
- "/flags_variants/sb.jpg",
- "/flags_variants/sb.png",
- "/flags_variants/sc.jpg",
- "/flags_variants/sc.png",
- "/flags_variants/sd.jpg",
- "/flags_variants/sd.png",
- "/flags_variants/se.jpg",
- "/flags_variants/se.png",
- "/flags_variants/sg.jpg",
- "/flags_variants/sg.png",
- "/flags_variants/sh-ac.jpg",
- "/flags_variants/sh-ac.png",
- "/flags_variants/sh-hl.jpg",
- "/flags_variants/sh-hl.png",
- "/flags_variants/sh-ta.jpg",
- "/flags_variants/sh-ta.png",
- "/flags_variants/si.jpg",
- "/flags_variants/si.png",
- "/flags_variants/sj.jpg",
- "/flags_variants/sj.png",
- "/flags_variants/sk.jpg",
- "/flags_variants/sk.png",
- "/flags_variants/sl.jpg",
- "/flags_variants/sl.png",
- "/flags_variants/sm.jpg",
- "/flags_variants/sm.png",
- "/flags_variants/sn.jpg",
- "/flags_variants/sn.png",
- "/flags_variants/so.jpg",
- "/flags_variants/so.png",
- "/flags_variants/sr.jpg",
- "/flags_variants/sr.png",
- "/flags_variants/ss.jpg",
- "/flags_variants/ss.png",
- "/flags_variants/st.jpg",
- "/flags_variants/st.png",
- "/flags_variants/sv.jpg",
- "/flags_variants/sv.png",
- "/flags_variants/sx.jpg",
- "/flags_variants/sx.png",
- "/flags_variants/sy.jpg",
- "/flags_variants/sy.png",
- "/flags_variants/sz.jpg",
- "/flags_variants/sz.png",
- "/flags_variants/tc.jpg",
- "/flags_variants/tc.png",
- "/flags_variants/td.jpg",
- "/flags_variants/td.png",
- "/flags_variants/tf.jpg",
- "/flags_variants/tf.png",
- "/flags_variants/tg.jpg",
- "/flags_variants/tg.png",
- "/flags_variants/th.jpg",
- "/flags_variants/th.png",
- "/flags_variants/tj.jpg",
- "/flags_variants/tj.png",
- "/flags_variants/tk.jpg",
- "/flags_variants/tk.png",
- "/flags_variants/tl.jpg",
- "/flags_variants/tl.png",
- "/flags_variants/tm.jpg",
- "/flags_variants/tm.png",
- "/flags_variants/tn.jpg",
- "/flags_variants/tn.png",
- "/flags_variants/to.jpg",
- "/flags_variants/to.png",
- "/flags_variants/tr.jpg",
- "/flags_variants/tr.png",
- "/flags_variants/tt.jpg",
- "/flags_variants/tt.png",
- "/flags_variants/tv.jpg",
- "/flags_variants/tv.png",
- "/flags_variants/tw.jpg",
- "/flags_variants/tw.png",
- "/flags_variants/tz.jpg",
- "/flags_variants/tz.png",
- "/flags_variants/ua-BilaCerkva.jpg",
- "/flags_variants/ua-BilaCerkva.png",
- "/flags_variants/ua-Cherkasy.jpg",
- "/flags_variants/ua-Cherkasy.png",
- "/flags_variants/ua-Chernihiv.jpg",
- "/flags_variants/ua-Chernihiv.png",
- "/flags_variants/ua-IvanoFrankivsk.jpg",
- "/flags_variants/ua-IvanoFrankivsk.png",
- "/flags_variants/ua-Kyiv.jpg",
- "/flags_variants/ua-Kyiv.png",
- "/flags_variants/ua-Lutsk.jpg",
- "/flags_variants/ua-Lutsk.png",
- "/flags_variants/ua-Lviv.jpg",
- "/flags_variants/ua-Lviv.png",
- "/flags_variants/ua-Ternopil.jpg",
- "/flags_variants/ua-Ternopil.png",
- "/flags_variants/ua-Uzhhorod.jpg",
- "/flags_variants/ua-Uzhhorod.png",
- "/flags_variants/ua-Vinnycia.jpg",
- "/flags_variants/ua-Vinnycia.png",
- "/flags_variants/ua-Zhytomyr.jpg",
- "/flags_variants/ua-Zhytomyr.png",
- "/flags_variants/ua.jpg",
- "/flags_variants/ua.png",
- "/flags_variants/ug.jpg",
- "/flags_variants/ug.png",
- "/flags_variants/um.jpg",
- "/flags_variants/um.png",
- "/flags_variants/un.jpg",
- "/flags_variants/un.png",
- "/flags_variants/us.jpg",
- "/flags_variants/us.png",
- "/flags_variants/uy.jpg",
- "/flags_variants/uy.png",
- "/flags_variants/uz.jpg",
- "/flags_variants/uz.png",
- "/flags_variants/va.jpg",
- "/flags_variants/va.png",
- "/flags_variants/vc.jpg",
- "/flags_variants/vc.png",
- "/flags_variants/ve.jpg",
- "/flags_variants/ve.png",
- "/flags_variants/vg.jpg",
- "/flags_variants/vg.png",
- "/flags_variants/vi.jpg",
- "/flags_variants/vi.png",
- "/flags_variants/vn.jpg",
- "/flags_variants/vn.png",
- "/flags_variants/vu.jpg",
- "/flags_variants/vu.png",
- "/flags_variants/wf.jpg",
- "/flags_variants/wf.png",
- "/flags_variants/ws.jpg",
- "/flags_variants/ws.png",
- "/flags_variants/xk.jpg",
- "/flags_variants/xk.png",
- "/flags_variants/ye.jpg",
- "/flags_variants/ye.png",
- "/flags_variants/yt.jpg",
- "/flags_variants/yt.png",
- "/flags_variants/za.jpg",
- "/flags_variants/za.png",
- "/flags_variants/zm.jpg",
- "/flags_variants/zm.png",
- "/flags_variants/zw.jpg",
- "/flags_variants/zw.png",
- "/logos/1password.svg",
- "/logos/adguard-logo.svg",
- "/logos/adguard.svg",
- "/logos/adidas.svg",
- "/logos/affinity-designer.svg",
- "/logos/affinity-photo.svg",
- "/logos/affinity-publisher.svg",
- "/logos/amazon.svg",
- "/logos/android-auto.svg",
- "/logos/apache.svg",
- "/logos/apple.svg",
- "/logos/apple_app_store.svg",
- "/logos/apple_books.svg",
- "/logos/apple_homekit.svg",
- "/logos/apple_icloud.svg",
- "/logos/apple_music.svg",
- "/logos/arm.svg",
- "/logos/atb.svg",
- "/logos/authentik-logo.svg",
- "/logos/authentik.svg",
- "/logos/binance.svg",
- "/logos/bitcoin.svg",
- "/logos/bitwarden.svg",
- "/logos/bluesky.svg",
- "/logos/bmw.svg",
- "/logos/bvr.svg",
- "/logos/chromium.svg",
- "/logos/coca-cola.svg",
- "/logos/dalnoboy-service.svg",
- "/logos/debian.svg",
- "/logos/digital-ocean.svg",
- "/logos/disney.svg",
- "/logos/docker-icon.svg",
- "/logos/docker.svg",
- "/logos/dockge.svg",
- "/logos/dodge.svg",
- "/logos/duckduckgo.svg",
- "/logos/enpass.svg",
- "/logos/eufy.svg",
- "/logos/facebook-messenger.svg",
- "/logos/fastapi-logo.svg",
- "/logos/fedora.svg",
- "/logos/fedora_logo.svg",
- "/logos/fiat.svg",
- "/logos/firefox.svg",
- "/logos/ford.svg",
- "/logos/forgejo.svg",
- "/logos/freebsd.svg",
- "/logos/frigate-logo.svg",
- "/logos/git.svg",
- "/logos/gitea.svg",
- "/logos/github-logo.svg",
- "/logos/github.svg",
- "/logos/gitlab-logo.svg",
- "/logos/gitlab.svg",
- "/logos/gmail.svg",
- "/logos/go.dev.svg",
- "/logos/google-cloud.svg",
- "/logos/google-drive.svg",
- "/logos/google-fit.svg",
- "/logos/google-home.svg",
- "/logos/google-maps.svg",
- "/logos/google-meet.svg",
- "/logos/google-photos.svg",
- "/logos/google-play-icon.svg",
- "/logos/google.svg",
- "/logos/google_chrome.svg",
- "/logos/google_chrome_icon.svg",
- "/logos/grafana.svg",
- "/logos/graphql.svg",
- "/logos/guinness.svg",
- "/logos/homarr.svg",
- "/logos/home-assistant-logo.svg",
- "/logos/home-assistant.svg",
- "/logos/homebridge.svg",
- "/logos/honda.svg",
- "/logos/ibkr.svg",
- "/logos/immich.svg",
- "/logos/influxdb-logo.svg",
- "/logos/influxdb.svg",
- "/logos/jeep.svg",
- "/logos/jellyfin.svg",
- "/logos/jägermeister.svg",
- "/logos/kubernetes.svg",
- "/logos/kyivstar.svg",
- "/logos/languagetool.svg",
- "/logos/laravel-logo.svg",
- "/logos/laravel.svg",
- "/logos/lego.svg",
- "/logos/letsencrypt-logo.svg",
- "/logos/letsencrypt.svg",
- "/logos/lg.svg",
- "/logos/lifecell.svg",
- "/logos/lifecell_logo.svg",
- "/logos/linux-mint.svg",
- "/logos/linux-tux.svg",
- "/logos/mariadb-icon.svg",
- "/logos/mariadb.svg",
- "/logos/mastercard.svg",
- "/logos/matter-icon.svg",
- "/logos/matter.svg",
- "/logos/mattermost-icon.svg",
- "/logos/mattermost-line.svg",
- "/logos/mattermost.svg",
- "/logos/mcdonalds.svg",
- "/logos/meest.svg",
- "/logos/meta-facebook.svg",
- "/logos/meta-icon.svg",
- "/logos/meta-instagram.svg",
- "/logos/meta-threads.svg",
- "/logos/meta-whatsapp-icon.svg",
- "/logos/meta.svg",
- "/logos/microsoft-azure.svg",
- "/logos/microsoft-edge.svg",
- "/logos/microsoft-linkedin-icon.svg",
- "/logos/microsoft-linkedin.svg",
- "/logos/microsoft-onedrive.svg",
- "/logos/microsoft-teams.svg",
- "/logos/microsoft-windows-icon.svg",
- "/logos/microsoft-windows.svg",
- "/logos/microsoft.svg",
- "/logos/microsoft_office_outlook.svg",
- "/logos/microsoft_outlook.svg",
- "/logos/mikrotik.svg",
- "/logos/mikrotik_logo.svg",
- "/logos/mongodb.svg",
- "/logos/mono.svg",
- "/logos/monobank_paw.svg",
- "/logos/monobank_text.svg",
- "/logos/mqtt.svg",
- "/logos/mysql-icon.svg",
- "/logos/mysql.svg",
- "/logos/namecheap.svg",
- "/logos/nationwide.svg",
- "/logos/neo4j.svg",
- "/logos/neocom.svg",
- "/logos/netflix.svg",
- "/logos/nikamebel.svg",
- "/logos/nova_global.svg",
- "/logos/nova_post.svg",
- "/logos/novapay.svg",
- "/logos/nvidia.svg",
- "/logos/nvidia_vertical.svg",
- "/logos/okko.svg",
- "/logos/openai-icon.svg",
- "/logos/openvpn.svg",
- "/logos/opera.svg",
- "/logos/paypal.svg",
- "/logos/pepsi.svg",
- "/logos/pepsi_2014-2023.svg",
- "/logos/php.svg",
- "/logos/postgresql.svg",
- "/logos/privat24.svg",
- "/logos/privat24bussiness.svg",
- "/logos/privatbank.svg",
- "/logos/privatbank_logo.svg",
- "/logos/puma.svg",
- "/logos/pumb.svg",
- "/logos/python-logo.svg",
- "/logos/python.svg",
- "/logos/rabbitmq-logo.svg",
- "/logos/rabbitmq.svg",
- "/logos/raspberry-pi.svg",
- "/logos/react.svg",
- "/logos/reddit-icon.svg",
- "/logos/redis-logo.svg",
- "/logos/redis.svg",
- "/logos/reebok.svg",
- "/logos/reolink.svg",
- "/logos/revolut.svg",
- "/logos/roomerin.svg",
- "/logos/sainsburys.svg",
- "/logos/samsung.svg",
- "/logos/sendpulse.svg",
- "/logos/sendpulse_logo.svg",
- "/logos/shadoll.svg",
- "/logos/shkafnik.svg",
- "/logos/shkafnik_logo.svg",
- "/logos/siemens.svg",
- "/logos/signal-logo.svg",
- "/logos/signal.svg",
- "/logos/silpo.svg",
- "/logos/skechers.svg",
- "/logos/slack.svg",
- "/logos/slzb.svg",
- "/logos/spotify-icon.svg",
- "/logos/spotify.svg",
- "/logos/stackoverflow-icon.svg",
- "/logos/stackoverflow.svg",
- "/logos/starbucks.svg",
- "/logos/suzuki.svg",
- "/logos/suzuki_vertical.svg",
- "/logos/svelte-icon.svg",
- "/logos/swagger.svg",
- "/logos/swift.svg",
- "/logos/tesla.svg",
- "/logos/thread-net.svg",
- "/logos/toyota.svg",
- "/logos/toyota_logo.svg",
- "/logos/traefik-logo.svg",
- "/logos/traefik-proxy-logo.svg",
- "/logos/traefik-proxy.svg",
- "/logos/trakt.svg",
- "/logos/ubuntu-logo.svg",
- "/logos/ubuntu.svg",
- "/logos/ukrnet.svg",
- "/logos/ukrposhta.svg",
- "/logos/unifi.svg",
- "/logos/uptimekuma.svg",
- "/logos/viber.svg",
- "/logos/vintage.svg",
- "/logos/visa.svg",
- "/logos/visual-studio-code.svg",
- "/logos/vodafone.svg",
- "/logos/vue.svg",
- "/logos/webhooks.svg",
- "/logos/webkit.svg",
- "/logos/webtorrent.svg",
- "/logos/wifi.svg",
- "/logos/wireguard.svg",
- "/logos/wise-icon.svg",
- "/logos/wise.svg",
- "/logos/wog.svg",
- "/logos/yahoo.svg",
- "/logos/yahoo_logo.svg",
- "/logos/yahoo_mail.svg",
- "/logos/youtube.svg",
- "/logos/zigbee2mqtt.svg",
- "/logos/zoom-icon.svg",
- "/logos/zoom.svg",
- "/logos_variants/1password.jpg",
- "/logos_variants/1password.png",
- "/logos_variants/adguard-logo.jpg",
- "/logos_variants/adguard-logo.png",
- "/logos_variants/adguard.jpg",
- "/logos_variants/adguard.png",
- "/logos_variants/adidas.jpg",
- "/logos_variants/adidas.png",
- "/logos_variants/affinity-designer.jpg",
- "/logos_variants/affinity-designer.png",
- "/logos_variants/affinity-photo.jpg",
- "/logos_variants/affinity-photo.png",
- "/logos_variants/affinity-publisher.jpg",
- "/logos_variants/affinity-publisher.png",
- "/logos_variants/amazon.jpg",
- "/logos_variants/amazon.png",
- "/logos_variants/android-auto.jpg",
- "/logos_variants/android-auto.png",
- "/logos_variants/apache.jpg",
- "/logos_variants/apache.png",
- "/logos_variants/apple.jpg",
- "/logos_variants/apple.png",
- "/logos_variants/apple_app_store.jpg",
- "/logos_variants/apple_app_store.png",
- "/logos_variants/apple_books.jpg",
- "/logos_variants/apple_books.png",
- "/logos_variants/apple_homekit.jpg",
- "/logos_variants/apple_homekit.png",
- "/logos_variants/apple_icloud.jpg",
- "/logos_variants/apple_icloud.png",
- "/logos_variants/apple_music.jpg",
- "/logos_variants/apple_music.png",
- "/logos_variants/arm.jpg",
- "/logos_variants/arm.png",
- "/logos_variants/atb.jpg",
- "/logos_variants/atb.png",
- "/logos_variants/authentik-logo.jpg",
- "/logos_variants/authentik-logo.png",
- "/logos_variants/authentik.jpg",
- "/logos_variants/authentik.png",
- "/logos_variants/binance.jpg",
- "/logos_variants/binance.png",
- "/logos_variants/bitcoin.jpg",
- "/logos_variants/bitcoin.png",
- "/logos_variants/bitwarden.jpg",
- "/logos_variants/bitwarden.png",
- "/logos_variants/bluesky.jpg",
- "/logos_variants/bluesky.png",
- "/logos_variants/bmw.jpg",
- "/logos_variants/bmw.png",
- "/logos_variants/bvr.jpg",
- "/logos_variants/bvr.png",
- "/logos_variants/chromium.jpg",
- "/logos_variants/chromium.png",
- "/logos_variants/coca-cola.jpg",
- "/logos_variants/coca-cola.png",
- "/logos_variants/dalnoboy-service.jpg",
- "/logos_variants/dalnoboy-service.png",
- "/logos_variants/debian.jpg",
- "/logos_variants/debian.png",
- "/logos_variants/digital-ocean.jpg",
- "/logos_variants/digital-ocean.png",
- "/logos_variants/disney.jpg",
- "/logos_variants/disney.png",
- "/logos_variants/docker-icon.jpg",
- "/logos_variants/docker-icon.png",
- "/logos_variants/docker.jpg",
- "/logos_variants/docker.png",
- "/logos_variants/dockge.jpg",
- "/logos_variants/dockge.png",
- "/logos_variants/dodge.jpg",
- "/logos_variants/dodge.png",
- "/logos_variants/duckduckgo.jpg",
- "/logos_variants/duckduckgo.png",
- "/logos_variants/enpass.jpg",
- "/logos_variants/enpass.png",
- "/logos_variants/eufy.jpg",
- "/logos_variants/eufy.png",
- "/logos_variants/facebook-messenger.jpg",
- "/logos_variants/facebook-messenger.png",
- "/logos_variants/fastapi-logo.jpg",
- "/logos_variants/fastapi-logo.png",
- "/logos_variants/fedora.jpg",
- "/logos_variants/fedora.png",
- "/logos_variants/fedora_logo.jpg",
- "/logos_variants/fedora_logo.png",
- "/logos_variants/fiat.jpg",
- "/logos_variants/fiat.png",
- "/logos_variants/firefox.jpg",
- "/logos_variants/firefox.png",
- "/logos_variants/ford.jpg",
- "/logos_variants/ford.png",
- "/logos_variants/forgejo.jpg",
- "/logos_variants/forgejo.png",
- "/logos_variants/freebsd.jpg",
- "/logos_variants/freebsd.png",
- "/logos_variants/frigate-logo.jpg",
- "/logos_variants/frigate-logo.png",
- "/logos_variants/git.jpg",
- "/logos_variants/git.png",
- "/logos_variants/gitea.jpg",
- "/logos_variants/gitea.png",
- "/logos_variants/github-logo.jpg",
- "/logos_variants/github-logo.png",
- "/logos_variants/github.jpg",
- "/logos_variants/github.png",
- "/logos_variants/gitlab-logo.jpg",
- "/logos_variants/gitlab-logo.png",
- "/logos_variants/gitlab.jpg",
- "/logos_variants/gitlab.png",
- "/logos_variants/gmail.jpg",
- "/logos_variants/gmail.png",
- "/logos_variants/go.dev.jpg",
- "/logos_variants/go.dev.png",
- "/logos_variants/google-cloud.jpg",
- "/logos_variants/google-cloud.png",
- "/logos_variants/google-drive.jpg",
- "/logos_variants/google-drive.png",
- "/logos_variants/google-fit.jpg",
- "/logos_variants/google-fit.png",
- "/logos_variants/google-home.jpg",
- "/logos_variants/google-home.png",
- "/logos_variants/google-maps.jpg",
- "/logos_variants/google-maps.png",
- "/logos_variants/google-meet.jpg",
- "/logos_variants/google-meet.png",
- "/logos_variants/google-photos.jpg",
- "/logos_variants/google-photos.png",
- "/logos_variants/google-play-icon.jpg",
- "/logos_variants/google-play-icon.png",
- "/logos_variants/google.jpg",
- "/logos_variants/google.png",
- "/logos_variants/google_chrome.jpg",
- "/logos_variants/google_chrome.png",
- "/logos_variants/google_chrome_icon.jpg",
- "/logos_variants/google_chrome_icon.png",
- "/logos_variants/grafana.jpg",
- "/logos_variants/grafana.png",
- "/logos_variants/graphql.jpg",
- "/logos_variants/graphql.png",
- "/logos_variants/guinness.jpg",
- "/logos_variants/guinness.png",
- "/logos_variants/homarr.jpg",
- "/logos_variants/homarr.png",
- "/logos_variants/home-assistant-logo.jpg",
- "/logos_variants/home-assistant-logo.png",
- "/logos_variants/home-assistant.jpg",
- "/logos_variants/home-assistant.png",
- "/logos_variants/homebridge.jpg",
- "/logos_variants/homebridge.png",
- "/logos_variants/honda.jpg",
- "/logos_variants/honda.png",
- "/logos_variants/ibkr.jpg",
- "/logos_variants/ibkr.png",
- "/logos_variants/immich.jpg",
- "/logos_variants/immich.png",
- "/logos_variants/influxdb-logo.jpg",
- "/logos_variants/influxdb-logo.png",
- "/logos_variants/influxdb.jpg",
- "/logos_variants/influxdb.png",
- "/logos_variants/jeep.jpg",
- "/logos_variants/jeep.png",
- "/logos_variants/jellyfin.jpg",
- "/logos_variants/jellyfin.png",
- "/logos_variants/jägermeister.jpg",
- "/logos_variants/jägermeister.png",
- "/logos_variants/kubernetes.jpg",
- "/logos_variants/kubernetes.png",
- "/logos_variants/kyivstar.jpg",
- "/logos_variants/kyivstar.png",
- "/logos_variants/languagetool.jpg",
- "/logos_variants/languagetool.png",
- "/logos_variants/laravel-logo.jpg",
- "/logos_variants/laravel-logo.png",
- "/logos_variants/laravel.jpg",
- "/logos_variants/laravel.png",
- "/logos_variants/lego.jpg",
- "/logos_variants/lego.png",
- "/logos_variants/letsencrypt-logo.jpg",
- "/logos_variants/letsencrypt-logo.png",
- "/logos_variants/letsencrypt.jpg",
- "/logos_variants/letsencrypt.png",
- "/logos_variants/lg.jpg",
- "/logos_variants/lg.png",
- "/logos_variants/lifecell.jpg",
- "/logos_variants/lifecell.png",
- "/logos_variants/lifecell_logo.jpg",
- "/logos_variants/lifecell_logo.png",
- "/logos_variants/linux-mint.jpg",
- "/logos_variants/linux-mint.png",
- "/logos_variants/linux-tux.jpg",
- "/logos_variants/linux-tux.png",
- "/logos_variants/mariadb-icon.jpg",
- "/logos_variants/mariadb-icon.png",
- "/logos_variants/mariadb.jpg",
- "/logos_variants/mariadb.png",
- "/logos_variants/mastercard.jpg",
- "/logos_variants/mastercard.png",
- "/logos_variants/matter-icon.jpg",
- "/logos_variants/matter-icon.png",
- "/logos_variants/matter.jpg",
- "/logos_variants/matter.png",
- "/logos_variants/mattermost-icon.jpg",
- "/logos_variants/mattermost-icon.png",
- "/logos_variants/mattermost-line.jpg",
- "/logos_variants/mattermost-line.png",
- "/logos_variants/mattermost.jpg",
- "/logos_variants/mattermost.png",
- "/logos_variants/mcdonalds.jpg",
- "/logos_variants/mcdonalds.png",
- "/logos_variants/meest.jpg",
- "/logos_variants/meest.png",
- "/logos_variants/meta-facebook.jpg",
- "/logos_variants/meta-facebook.png",
- "/logos_variants/meta-icon.jpg",
- "/logos_variants/meta-icon.png",
- "/logos_variants/meta-instagram.jpg",
- "/logos_variants/meta-instagram.png",
- "/logos_variants/meta-threads.jpg",
- "/logos_variants/meta-threads.png",
- "/logos_variants/meta-whatsapp-icon.jpg",
- "/logos_variants/meta-whatsapp-icon.png",
- "/logos_variants/meta.jpg",
- "/logos_variants/meta.png",
- "/logos_variants/microsoft-azure.jpg",
- "/logos_variants/microsoft-azure.png",
- "/logos_variants/microsoft-edge.jpg",
- "/logos_variants/microsoft-edge.png",
- "/logos_variants/microsoft-linkedin-icon.jpg",
- "/logos_variants/microsoft-linkedin-icon.png",
- "/logos_variants/microsoft-linkedin.jpg",
- "/logos_variants/microsoft-linkedin.png",
- "/logos_variants/microsoft-onedrive.jpg",
- "/logos_variants/microsoft-onedrive.png",
- "/logos_variants/microsoft-teams.jpg",
- "/logos_variants/microsoft-teams.png",
- "/logos_variants/microsoft-windows-icon.jpg",
- "/logos_variants/microsoft-windows-icon.png",
- "/logos_variants/microsoft-windows.jpg",
- "/logos_variants/microsoft-windows.png",
- "/logos_variants/microsoft.jpg",
- "/logos_variants/microsoft.png",
- "/logos_variants/microsoft_office_outlook.jpg",
- "/logos_variants/microsoft_office_outlook.png",
- "/logos_variants/microsoft_outlook.jpg",
- "/logos_variants/microsoft_outlook.png",
- "/logos_variants/mikrotik.jpg",
- "/logos_variants/mikrotik.png",
- "/logos_variants/mikrotik_logo.jpg",
- "/logos_variants/mikrotik_logo.png",
- "/logos_variants/mongodb.jpg",
- "/logos_variants/mongodb.png",
- "/logos_variants/mono.jpg",
- "/logos_variants/mono.png",
- "/logos_variants/monobank_paw.jpg",
- "/logos_variants/monobank_paw.png",
- "/logos_variants/monobank_text.jpg",
- "/logos_variants/monobank_text.png",
- "/logos_variants/mqtt.jpg",
- "/logos_variants/mqtt.png",
- "/logos_variants/mysql-icon.jpg",
- "/logos_variants/mysql-icon.png",
- "/logos_variants/mysql.jpg",
- "/logos_variants/mysql.png",
- "/logos_variants/namecheap.jpg",
- "/logos_variants/namecheap.png",
- "/logos_variants/nationwide.jpg",
- "/logos_variants/nationwide.png",
- "/logos_variants/neo4j.jpg",
- "/logos_variants/neo4j.png",
- "/logos_variants/neocom.jpg",
- "/logos_variants/neocom.png",
- "/logos_variants/netflix.jpg",
- "/logos_variants/netflix.png",
- "/logos_variants/nikamebel.jpg",
- "/logos_variants/nikamebel.png",
- "/logos_variants/nova_global.jpg",
- "/logos_variants/nova_global.png",
- "/logos_variants/nova_post.jpg",
- "/logos_variants/nova_post.png",
- "/logos_variants/novapay.jpg",
- "/logos_variants/novapay.png",
- "/logos_variants/nvidia.jpg",
- "/logos_variants/nvidia.png",
- "/logos_variants/nvidia_vertical.jpg",
- "/logos_variants/nvidia_vertical.png",
- "/logos_variants/okko.jpg",
- "/logos_variants/okko.png",
- "/logos_variants/openai-icon.jpg",
- "/logos_variants/openai-icon.png",
- "/logos_variants/openvpn.jpg",
- "/logos_variants/openvpn.png",
- "/logos_variants/opera.jpg",
- "/logos_variants/opera.png",
- "/logos_variants/paypal.jpg",
- "/logos_variants/paypal.png",
- "/logos_variants/pepsi.jpg",
- "/logos_variants/pepsi.png",
- "/logos_variants/pepsi_2014-2023.jpg",
- "/logos_variants/pepsi_2014-2023.png",
- "/logos_variants/php.jpg",
- "/logos_variants/php.png",
- "/logos_variants/postgresql.jpg",
- "/logos_variants/postgresql.png",
- "/logos_variants/privat24.jpg",
- "/logos_variants/privat24.png",
- "/logos_variants/privat24bussiness.jpg",
- "/logos_variants/privat24bussiness.png",
- "/logos_variants/privatbank.jpg",
- "/logos_variants/privatbank.png",
- "/logos_variants/privatbank_logo.jpg",
- "/logos_variants/privatbank_logo.png",
- "/logos_variants/puma.jpg",
- "/logos_variants/puma.png",
- "/logos_variants/pumb.jpg",
- "/logos_variants/pumb.png",
- "/logos_variants/python-logo.jpg",
- "/logos_variants/python-logo.png",
- "/logos_variants/python.jpg",
- "/logos_variants/python.png",
- "/logos_variants/rabbitmq-logo.jpg",
- "/logos_variants/rabbitmq-logo.png",
- "/logos_variants/rabbitmq.jpg",
- "/logos_variants/rabbitmq.png",
- "/logos_variants/raspberry-pi.jpg",
- "/logos_variants/raspberry-pi.png",
- "/logos_variants/react.jpg",
- "/logos_variants/react.png",
- "/logos_variants/reddit-icon.jpg",
- "/logos_variants/reddit-icon.png",
- "/logos_variants/redis-logo.jpg",
- "/logos_variants/redis-logo.png",
- "/logos_variants/redis.jpg",
- "/logos_variants/redis.png",
- "/logos_variants/reebok.jpg",
- "/logos_variants/reebok.png",
- "/logos_variants/reolink.jpg",
- "/logos_variants/reolink.png",
- "/logos_variants/revolut.jpg",
- "/logos_variants/revolut.png",
- "/logos_variants/roomerin.jpg",
- "/logos_variants/roomerin.png",
- "/logos_variants/sainsburys.jpg",
- "/logos_variants/sainsburys.png",
- "/logos_variants/samsung.jpg",
- "/logos_variants/samsung.png",
- "/logos_variants/sendpulse.jpg",
- "/logos_variants/sendpulse.png",
- "/logos_variants/sendpulse_logo.jpg",
- "/logos_variants/sendpulse_logo.png",
- "/logos_variants/shadoll.jpg",
- "/logos_variants/shadoll.png",
- "/logos_variants/shkafnik.jpg",
- "/logos_variants/shkafnik.png",
- "/logos_variants/shkafnik_logo.jpg",
- "/logos_variants/shkafnik_logo.png",
- "/logos_variants/siemens.jpg",
- "/logos_variants/siemens.png",
- "/logos_variants/signal-logo.jpg",
- "/logos_variants/signal-logo.png",
- "/logos_variants/signal.jpg",
- "/logos_variants/signal.png",
- "/logos_variants/silpo.jpg",
- "/logos_variants/silpo.png",
- "/logos_variants/skechers.jpg",
- "/logos_variants/skechers.png",
- "/logos_variants/slack.jpg",
- "/logos_variants/slack.png",
- "/logos_variants/slzb.jpg",
- "/logos_variants/slzb.png",
- "/logos_variants/spotify-icon.jpg",
- "/logos_variants/spotify-icon.png",
- "/logos_variants/spotify.jpg",
- "/logos_variants/spotify.png",
- "/logos_variants/stackoverflow-icon.jpg",
- "/logos_variants/stackoverflow-icon.png",
- "/logos_variants/stackoverflow.jpg",
- "/logos_variants/stackoverflow.png",
- "/logos_variants/starbucks.jpg",
- "/logos_variants/starbucks.png",
- "/logos_variants/suzuki.jpg",
- "/logos_variants/suzuki.png",
- "/logos_variants/suzuki_vertical.jpg",
- "/logos_variants/suzuki_vertical.png",
- "/logos_variants/svelte-icon.jpg",
- "/logos_variants/svelte-icon.png",
- "/logos_variants/swagger.jpg",
- "/logos_variants/swagger.png",
- "/logos_variants/swift.jpg",
- "/logos_variants/swift.png",
- "/logos_variants/tesla.jpg",
- "/logos_variants/tesla.png",
- "/logos_variants/thread-net.jpg",
- "/logos_variants/thread-net.png",
- "/logos_variants/toyota.jpg",
- "/logos_variants/toyota.png",
- "/logos_variants/toyota_logo.jpg",
- "/logos_variants/toyota_logo.png",
- "/logos_variants/traefik-logo.jpg",
- "/logos_variants/traefik-logo.png",
- "/logos_variants/traefik-proxy-logo.jpg",
- "/logos_variants/traefik-proxy-logo.png",
- "/logos_variants/traefik-proxy.jpg",
- "/logos_variants/traefik-proxy.png",
- "/logos_variants/trakt.jpg",
- "/logos_variants/trakt.png",
- "/logos_variants/ubuntu-logo.jpg",
- "/logos_variants/ubuntu-logo.png",
- "/logos_variants/ubuntu.jpg",
- "/logos_variants/ubuntu.png",
- "/logos_variants/ukrnet.jpg",
- "/logos_variants/ukrnet.png",
- "/logos_variants/ukrposhta.jpg",
- "/logos_variants/ukrposhta.png",
- "/logos_variants/unifi.jpg",
- "/logos_variants/unifi.png",
- "/logos_variants/uptimekuma.jpg",
- "/logos_variants/uptimekuma.png",
- "/logos_variants/viber.jpg",
- "/logos_variants/viber.png",
- "/logos_variants/vintage.jpg",
- "/logos_variants/vintage.png",
- "/logos_variants/visa.jpg",
- "/logos_variants/visa.png",
- "/logos_variants/visual-studio-code.jpg",
- "/logos_variants/visual-studio-code.png",
- "/logos_variants/vodafone.jpg",
- "/logos_variants/vodafone.png",
- "/logos_variants/vue.jpg",
- "/logos_variants/vue.png",
- "/logos_variants/webhooks.jpg",
- "/logos_variants/webhooks.png",
- "/logos_variants/webkit.jpg",
- "/logos_variants/webkit.png",
- "/logos_variants/webtorrent.jpg",
- "/logos_variants/webtorrent.png",
- "/logos_variants/wifi.jpg",
- "/logos_variants/wifi.png",
- "/logos_variants/wireguard.jpg",
- "/logos_variants/wireguard.png",
- "/logos_variants/wise-icon.jpg",
- "/logos_variants/wise-icon.png",
- "/logos_variants/wise.jpg",
- "/logos_variants/wise.png",
- "/logos_variants/wog.jpg",
- "/logos_variants/wog.png",
- "/logos_variants/yahoo.jpg",
- "/logos_variants/yahoo.png",
- "/logos_variants/yahoo_logo.jpg",
- "/logos_variants/yahoo_logo.png",
- "/logos_variants/yahoo_mail.jpg",
- "/logos_variants/yahoo_mail.png",
- "/logos_variants/youtube.jpg",
- "/logos_variants/youtube.png",
- "/logos_variants/zigbee2mqtt.jpg",
- "/logos_variants/zigbee2mqtt.png",
- "/logos_variants/zoom-icon.jpg",
- "/logos_variants/zoom-icon.png",
- "/logos_variants/zoom.jpg",
- "/logos_variants/zoom.png"
-]
\ No newline at end of file
diff --git a/scripts/generate-pwa-cache-list.js b/scripts/generate-pwa-cache-list.js
index e53e04e..4c42acf 100644
--- a/scripts/generate-pwa-cache-list.js
+++ b/scripts/generate-pwa-cache-list.js
@@ -2,11 +2,12 @@
// Node.js script to generate a list of all files in public and images for PWA caching
const fs = require('fs');
const path = require('path');
+const { collections } = require('../src/collections.js');
const projectRoot = path.join(__dirname, '..');
-const publicDir = path.join(projectRoot, 'public/images');
-const logosDir = path.join(projectRoot, 'logos');
-const logosGenDir = path.join(projectRoot, 'logos_variants');
+const publicDir = path.join(projectRoot, 'public');
+const imagesDir = path.join(publicDir, 'images');
+const imagesVarDir = path.join(projectRoot, 'logos_variants');
// List of files to ignore
const IGNORED_FILES = ['.DS_Store', 'CNAME', 'pwa-files-to-cache.json', '.gitignore'];
@@ -31,11 +32,11 @@ function safeWalkDir(dir, baseUrl = '') {
return walkDir(dir, baseUrl);
}
-const publicFiles = walkDir(publicDir, '').filter(f => !f.endsWith('sw.js'));
-const logosFiles = safeWalkDir(logosDir, 'logos');
-const logosGenFiles = safeWalkDir(logosGenDir, 'logos_variants');
+// Recursively walk all files in public, skipping IGNORED_FILES and sw.js
+let allFiles = walkDir(publicDir, '').filter(f => !f.endsWith('sw.js'));
-const allFiles = Array.from(new Set([...publicFiles, ...logosFiles, ...logosGenFiles]));
+// Remove duplicates
+allFiles = Array.from(new Set(allFiles));
fs.writeFileSync(
path.join(publicDir, 'pwa-files-to-cache.json'),
diff --git a/scripts/generate-svg-variants.js b/scripts/generate-svg-variants.js
index 6d49ef9..ec555b5 100644
--- a/scripts/generate-svg-variants.js
+++ b/scripts/generate-svg-variants.js
@@ -2,19 +2,8 @@
const fs = require('fs');
const path = require('path');
+const { collections } = require('../src/collections.js');
-const collections = [
- { name: 'logos', label: 'Logos',
- baseDir: 'logos',
- genDir: 'logos_variants',
- dataFile: 'data/logos.json'
- },
- { name: 'flags', label: 'Flags',
- baseDir: 'flags',
- genDir: 'flags_variants',
- dataFile: 'data/flags.json'
- }
-];
// Accept collection as a CLI arg or env var
const collectionArg = process.argv.find(arg => arg.startsWith('--collection='));
@@ -22,7 +11,7 @@ const collectionName = collectionArg ? collectionArg.split('=')[1] : (process.en
const collection = collections.find(c => c.name === collectionName) || collections[0];
const LOGOS_DIR = path.join(__dirname, '..', 'public', collection.baseDir);
-const LOGOS_GEN_DIR = path.join(__dirname, '..', 'public', collection.genDir);
+const LOGOS_GEN_DIR = path.join(__dirname, '..', 'public', collection.varDir);
// Try multiple possible locations for logos.json
const POSSIBLE_LOGOS_JSON_PATHS = [
diff --git a/scripts/update-data.js b/scripts/update-data.js
index d759388..0c1e659 100644
--- a/scripts/update-data.js
+++ b/scripts/update-data.js
@@ -12,9 +12,9 @@ const collectionArg = process.argv.find(arg => arg.startsWith('--collection='));
const collectionName = collectionArg ? collectionArg.split('=')[1] : (process.env.COLLECTION || 'logos');
const collection = collections.find(c => c.name === collectionName) || collections[0];
-const logosDir = path.join(__dirname, '..', 'public', collection.baseDir);
+const imagesDir = path.join(__dirname, '..', 'public', collection.baseDir);
const outputFile = path.join(__dirname, '..', 'public', collection.dataFile);
-const genDir = path.join(__dirname, '..', 'public', collection.genDir);
+const imagesVarDir = path.join(__dirname, '..', 'public', collection.imagesVarDir);
// Remove old PNG/JPG folders if they exist
const pngDir = path.join(__dirname, '..', 'public', collection.baseDir + '-png');
@@ -80,15 +80,15 @@ function svgToJpg(svgBuffer, width, height) {
}
// Pregenerate PNG and JPG images for SVG files
-function pregenerateImages(logoFiles, logosDir, genDir) {
- cleanDir(genDir);
+function pregenerateImages(logoFiles, imagesDir, imagesVarDir) {
+ cleanDir(imagesVarDir);
// Only process SVG files
const svgFiles = logoFiles.filter(file => /\.svg$/i.test(file));
for (const file of svgFiles) {
const base = getBaseName(file);
- const svgPath = path.join(logosDir, file);
- const pngPath = path.join(genDir, base + '.png');
- const jpgPath = path.join(genDir, base + '.jpg');
+ const svgPath = path.join(imagesDir, file);
+ const pngPath = path.join(imagesVarDir, base + '.png');
+ const jpgPath = path.join(imagesVarDir, base + '.jpg');
try {
const svgBuffer = fs.readFileSync(svgPath);
const pngBuffer = svgToPng(svgBuffer, 256, 256);
@@ -103,7 +103,7 @@ function pregenerateImages(logoFiles, logosDir, genDir) {
// Scan directory and update logo objects
function scanLogos() {
- console.log(`Scanning logos directory: ${logosDir}`);
+ console.log(`Scanning logos directory: ${imagesDir}`);
let existing = [];
if (fs.existsSync(outputFile)) {
@@ -115,12 +115,12 @@ function scanLogos() {
}
try {
- if (!fs.existsSync(logosDir)) {
- console.error(`Directory does not exist: ${logosDir}`);
+ if (!fs.existsSync(imagesDir)) {
+ console.error(`Directory does not exist: ${imagesDir}`);
return [];
}
- const files = fs.readdirSync(logosDir);
+ const files = fs.readdirSync(imagesDir);
// Filter for image files (svg, png, jpg, jpeg)
const logoFiles = files.filter(file =>
/\.(svg|png|jpg|jpeg)$/i.test(file)
@@ -185,13 +185,13 @@ function main() {
// If no collection is specified, process all collections
if (!collectionArg && !process.env.COLLECTION) {
for (const col of collections) {
- const logosDir = path.join(__dirname, '..', 'public', col.baseDir);
+ const imagesDir = path.join(__dirname, '..', 'public', col.baseDir);
const outputFile = path.join(__dirname, '..', 'public', col.dataFile);
- const genDir = path.join(__dirname, '..', 'public', col.genDir);
- if (!fs.existsSync(logosDir)) {
- fs.mkdirSync(logosDir, { recursive: true });
+ const varDir = path.join(__dirname, '..', 'public', col.varDir);
+ if (!fs.existsSync(imagesDir)) {
+ fs.mkdirSync(imagesDir, { recursive: true });
}
- const files = fs.readdirSync(logosDir);
+ const files = fs.readdirSync(imagesDir);
// Only update/disable/add, do not overwrite existing keys
let existing = [];
if (fs.existsSync(outputFile)) {
@@ -231,7 +231,7 @@ function main() {
})
.sort((a, b) => a.name.localeCompare(b.name));
let merged = [...existing, ...newLogos];
- pregenerateImages(files, logosDir, genDir);
+ pregenerateImages(files, imagesDir, varDir);
try {
const data = JSON.stringify(merged, null, 2);
fs.writeFileSync(outputFile, data);
@@ -243,8 +243,8 @@ function main() {
} else {
// Single collection mode (as before)
const logos = scanLogos();
- const files = fs.readdirSync(logosDir);
- pregenerateImages(files, logosDir, genDir);
+ const files = fs.readdirSync(imagesDir);
+ pregenerateImages(files, imagesDir, varDir);
saveLogosToJson(logos);
}
}
diff --git a/src/collections.js b/src/collections.js
index 063f46e..a3fb397 100644
--- a/src/collections.js
+++ b/src/collections.js
@@ -4,21 +4,21 @@ export const collections = [
name: 'logos',
label: 'Logos',
baseDir: 'images/logos',
- genDir: 'images/logos_variants',
+ varDir: 'images/logos_variants',
dataFile: 'data/logos.json'
},
{
name: 'flags',
label: 'Flags',
baseDir: 'images/flags',
- genDir: 'images/flags_variants',
+ varDir: 'images/flags_variants',
dataFile: 'data/flags.json'
},
{
name: 'emblems',
label: 'Emblems',
baseDir: 'images/emblems',
- genDir: 'images/emblems_variants',
+ varDir: 'images/emblems_variants',
dataFile: 'data/emblems.json'
}
];
diff --git a/src/components/Actions.svelte b/src/components/Actions.svelte
index badc657..7883062 100644
--- a/src/components/Actions.svelte
+++ b/src/components/Actions.svelte
@@ -1,6 +1,7 @@
diff --git a/src/components/CardMiddle.svelte b/src/components/CardMiddle.svelte
index 3699b49..b7a9ace 100644
--- a/src/components/CardMiddle.svelte
+++ b/src/components/CardMiddle.svelte
@@ -4,6 +4,7 @@
import ColorSwitcher from "./ColorSwitcher.svelte";
import { getDefaultLogoColor } from "../utils/colorTheme.js";
import { collections } from '../collections.js';
+ import { getContext } from 'svelte';
export let logo;
export let theme;
@@ -31,9 +32,16 @@
return collection ? collection.baseDir : 'images/logos';
}
+ let collection = getContext('collection');
+ if (!collection) {
+ if (typeof window !== 'undefined' && window.appData && window.appData.collection) {
+ collection = collections.find(c => c.name === window.appData.collection) || collections[0];
+ } else {
+ collection = collections[0];
+ }
+ }
function getImageUrl(logo) {
- const baseDir = getBaseDir(logo);
- return `/${baseDir}/${logo.path.split('/').pop()}`;
+ return `/${collection.baseDir}/${logo.path}`;
}
$: getLogoThemeColor = (logo) => getDefaultLogoColor(logo.colors, theme);
@@ -69,7 +77,7 @@
/>
{/key}
{:else}
-
+
{/if}