From 0b1c4000c300ed00eca146c4327dd31b7f0282a8 Mon Sep 17 00:00:00 2001 From: jwinterm Date: Mon, 17 Aug 2026 14:20:11 -0400 Subject: [PATCH] feat(hash-bags): add Hash Bags to the apps page, and give it a product page Live on Google Play (com.suchsoftware.hashwallet); the iOS build is in review and desktop follows, so both render through StoreButtons' existing null-href "Coming Soon" state rather than claiming availability we do not have. Content is taken from the project's own README and store-listing draft rather than invented: open-source, non-custodial, Wownero-first, twelve chains, and Ledger/Trezor/BitBox support. The "why it exists" section is the real reason, which is the interesting part of this product: Cake Wallet ended Wownero support in early 2026 and this fork keeps it first-class. Icon is the shipped play-icon-512, already square and opaque, so it takes the site's rounded-[22%] cleanly and cannot show a transparent corner wedge. Also linked out to hash.boats, listed on /products, and added to the sitemap. --- apps/web/public/images/products/hash-bags.png | Bin 0 -> 3066 bytes apps/web/src/app/apps/page.tsx | 12 ++ apps/web/src/app/products/hash-bags/page.tsx | 142 ++++++++++++++++++ apps/web/src/app/products/page.tsx | 8 + apps/web/src/app/sitemap.ts | 1 + 5 files changed, 163 insertions(+) create mode 100644 apps/web/public/images/products/hash-bags.png create mode 100644 apps/web/src/app/products/hash-bags/page.tsx diff --git a/apps/web/public/images/products/hash-bags.png b/apps/web/public/images/products/hash-bags.png new file mode 100644 index 0000000000000000000000000000000000000000..b971970c4570548e809acf7d89d838a48b08d3dd GIT binary patch literal 3066 zcmd5;c~H|w6y5;dVpK*HW09#Sq9~|b;!hGSilGK7C@6AB$ zA+3sx<&Z0l5+N`Mh;j>wNf07pP{Y}9Ndk03b#yFK!9UvmwL81}-oE#J-@dmOzO%Jf zpSyf606-nT$I2c66*yG^vuDDgpWHYCz`PQ?)sFpSVV7u!Ee5|V>iM1K6J>Qd_d9em zf?^ErTGw1=w6EA&Prf!&m*kMQ>=G{0n|^7|5*e~MD2_0`YvAx#YnM93n}A|QZooW% zn{W>n0zic`H2`$rfC6AP_{`Qck1O+dcga+|e{}pqOdni)So>_8N>9@}p5jCd$t<## zQGNPPqS6%E`l&a0NpHJ1;?psw@a%(#3sJuesZvz~ihk3vW2&w5rTGQXeBBpa1C?06 ziS^C0XRfBD7Vg-HO7DX{Si5S!H!Pk3$5Ip+k7inWZ|iO#B~ub+%?9S>lq_AXnwsFj zlUEOXlU7hVC%AyoV^`WV;eW;H;0T4FLA7JUSZ*SP3aIXF0gnt)jfchy{QJfet5w~Y zSQy6t9nbf?Ll&mQ)?`|oYz+sMIweU=3Q+OkeZ&xr<@;WWzEg%{|fOY@<(! zFioIQdiP!?kYuBnRroa^{6?94IM&p3*wOBq#6vrQ2F!C}qg!=D+Y~7#-)l>D$cgQZ z!&`74k)i`}oD`zTi@`LHQ=#{iCe94Q8@!SBSiX}DKGP)iiZ}1!^Q5X$#0ZTF*vSw* z&%3G~V{CG*onDkb4CrrGBAeCzYP;Z5-W10 zTUu6ld#v0(QrlM6lo~Ro!g!c%!FIuzZ|&^RXLuyvVRG9?1$FJJ9ir-lzaCz0=Sb|C zm%iGHMi)9aGUHcPn>rXjb?#{lN1pmP-7?_TYYz=yN~9=;qv-3ZHIQqdflOSXWc>O) zv)wAx2)_W@3?V5Q(@>1iJq0XoRlFB}Hd}_47J*#Qx znD(IKgz(wZEkhqM^zT0#9bg{koX)5_Z~v$?o;a{QiB@b7%eMC)QT@8`zhAsXmku^ERq?ah3>1;%9$t? zrEI6yHs13!ji>bPlHQD#4P-4APmg)O$lm67rhck%-tGl_Pi@Ir%518Juz3M9(=XuW z?L&y$Dk%MY?rt?O&T?^xy=2CJz0`G3=858tSkXN~TKX>p-!HT^LCeIINSrIPPhvDr z{;EDg(=cmerflg`tEi@XFNMXG9#}iUd}-LIVs%e#)S8v%ttZRhf$7C(cCNRRiPI!> z#aEu{nM?e^Fkjog)Tv%h3y5lo5KY2X*m9pAXeAzp}nOD)4>X{TcuqxH|*r zK**;L9<;(i!znd_PYI<$!%x?y=IM*#RA%=@aVo9UsE7YMR6(d^Z1bY_PA9z;mJ zax1G6X^|icK|rpJKAK63V27T7iqQdLvWW7boF)mx#LPpXXUZAUMmZ76h3Y=|gd7<1 z`pi;2X|FTsV6qt}dE!S?%1WY9sAeGG2O1&ML=;Hkve=Y$-I^C^#O+PAn2AqGUNlx% zEYFgk(7p`s>Rk`Ji>;-KOL|W|f`b4nW1qZ}P~q-BZ~YgA?+ZmZWpZPrhRdZd+;&FK RSqbw8_+7SESv!xM`xE^MMos_# literal 0 HcmV?d00001 diff --git a/apps/web/src/app/apps/page.tsx b/apps/web/src/app/apps/page.tsx index 76ddc56..0af9008 100644 --- a/apps/web/src/app/apps/page.tsx +++ b/apps/web/src/app/apps/page.tsx @@ -19,6 +19,18 @@ export const metadata: Metadata = { }; const apps = [ + { + name: "Hash Bags", + tagline: "Non-custodial multi-chain wallet. Wownero-first.", + icon: "/images/products/hash-bags.png", + color: "text-emerald-600 dark:text-emerald-400", + borderColor: "border-emerald-500/20", + href: "/products/hash-bags", + links: [ + { platform: "google" as const, href: "https://play.google.com/store/apps/details?id=com.suchsoftware.hashwallet" }, + { platform: "apple" as const, href: null }, + ], + }, { name: "Bloomword", tagline: "Grow your vocab: a daily word game with a living 3D tree", diff --git a/apps/web/src/app/products/hash-bags/page.tsx b/apps/web/src/app/products/hash-bags/page.tsx new file mode 100644 index 0000000..efeba21 --- /dev/null +++ b/apps/web/src/app/products/hash-bags/page.tsx @@ -0,0 +1,142 @@ +import { Header } from "@/components/layout/header"; +import { MobileNav } from "@/components/layout/mobile-nav"; +import { Card } from "@repo/ui/components/card"; +import { StoreButtons } from "@/components/store-buttons"; +import { JsonLd, breadcrumbLd, softwareAppLd } from "@/components/seo/json-ld"; +import Image from "next/image"; +import Link from "next/link"; +import type { Metadata } from "next"; + +const DESCRIPTION = + "Open-source, non-custodial wallet for Monero, Wownero, Bitcoin, and nine more chains. Wownero-first, with Ledger, Trezor, and BitBox support. Free on Android; iOS and desktop coming soon."; + +export const metadata: Metadata = { + title: "Hash Bags: Non-Custodial Multi-Chain Crypto Wallet | Such Software", + description: DESCRIPTION, + alternates: { canonical: "/products/hash-bags" }, + openGraph: { + title: "Hash Bags: Non-Custodial Multi-Chain Crypto Wallet | Such Software", + description: DESCRIPTION, + type: "website", + images: ["/images/branding/OG_banner_v2_light.png"], + }, + twitter: { + card: "summary_large_image", + images: ["/images/branding/OG_banner_v2_light.png"], + }, +}; + +const chains = [ + { name: "Monero", ticker: "XMR" }, + { name: "Wownero", ticker: "WOW" }, + { name: "Bitcoin", ticker: "BTC" }, + { name: "Litecoin", ticker: "LTC, incl. MWEB" }, + { name: "Bitcoin Cash", ticker: "BCH" }, + { name: "Dogecoin", ticker: "DOGE" }, + { name: "Nano", ticker: "XNO" }, + { name: "Ethereum", ticker: "ETH + ERC-20s" }, + { name: "Polygon", ticker: "POL" }, + { name: "Base", ticker: "BASE" }, + { name: "Arbitrum", ticker: "ARB" }, + { name: "BNB Smart Chain", ticker: "BSC" }, +]; + +export default function HashBagsPage() { + return ( +
+ + +
+
+ + ← Back to Products + + +
+ Hash Bags icon +

+ Hash Bags +

+
+ +
+

+ A wallet for your coins. Hash Bags is an open-source, non-custodial, multi-chain + crypto wallet: your keys and your funds stay on your device, and we never hold + either. Free on Android today, with iOS and desktop on the way. +

+
+ +
+ +

+ Live on Google Play. The iOS build is in review, and macOS, Linux, and Windows + follow after that. +

+
+ +
+

Why it exists

+
+

+ Cake Wallet ended Wownero support in early 2026. Hash Bags is a fork that keeps + Wownero a first-class mobile experience, maintained by the project's founder, + while shipping a slimmer and more focused multi-coin wallet without the chains and + integrations we would rather not maintain or recommend. +

+
+
+ +
+

Twelve chains

+
+ {chains.map((c) => ( + +
{c.name}
+
{c.ticker}
+
+ ))} +
+
+ +
+

Hardware wallets

+

+ Ledger, Trezor, and BitBox are supported, so the keys can stay off the phone + entirely if that is how you prefer to hold them. +

+
+ +
+ + ← All products + +
+
+ +
+ ); +} diff --git a/apps/web/src/app/products/page.tsx b/apps/web/src/app/products/page.tsx index df48767..eafa345 100644 --- a/apps/web/src/app/products/page.tsx +++ b/apps/web/src/app/products/page.tsx @@ -31,6 +31,14 @@ const products: Product[] = [ icon: "/images/products/custom-websites.svg", releaseDate: "2025-01-01", }, + { + slug: "hash-bags", + title: "Hash Bags", + description: "Open-source, non-custodial wallet for Monero, Wownero, Bitcoin, and nine more chains. Wownero-first, with Ledger, Trezor, and BitBox support. Android now; iOS and desktop coming.", + color: "emerald", + icon: "/images/products/hash-bags.png", + releaseDate: "2026-08-17", + }, { slug: "smirk-wallet", title: "Smirk Wallet", diff --git a/apps/web/src/app/sitemap.ts b/apps/web/src/app/sitemap.ts index 2caf56f..c42d583 100644 --- a/apps/web/src/app/sitemap.ts +++ b/apps/web/src/app/sitemap.ts @@ -17,6 +17,7 @@ export default function sitemap(): MetadataRoute.Sitemap { { url: `${base}/products/neroswap`, lastModified: updated, changeFrequency: "monthly", priority: 0.8 }, { url: `${base}/products/webshops`, lastModified: updated, changeFrequency: "monthly", priority: 0.8 }, { url: `${base}/products/custom-websites`, lastModified: updated, changeFrequency: "monthly", priority: 0.8 }, + { url: `${base}/products/hash-bags`, lastModified: updated, changeFrequency: "weekly", priority: 0.8 }, { url: `${base}/products/smirk-wallet`, lastModified: updated, changeFrequency: "monthly", priority: 0.8 }, { url: `${base}/products/bauhaus-echo`, lastModified: updated, changeFrequency: "monthly", priority: 0.8 }, { url: `${base}/products/vegan-iq`, lastModified: updated, changeFrequency: "monthly", priority: 0.8 },