mirror of
https://github.com/Such-Software/hash-wallet.git
synced 2026-10-17 05:41:29 +02:00
Avoids any confusion / potential trademark friction with HashWallet
(Spanish hardware-wallet company). Hash Bags is a more distinctive
name, harder to collide with, and we can still rank for 'hash wallet'
search via App Store / Play Store subtitle ('Hash Bags - A Wallet
for your Coins').
What changed (all user-visible strings):
- Launcher labels: android/app.properties, scripts/android/app_env.sh,
scripts/ios/app_env.sh, linux window title (CMakeLists +
my_application.cc)
- In-app text: lib/generated/i18n.dart + ARB sources under res/values/
- Brand docs: README.md, CONTRIBUTING.md, PRIVACY.md,
assets/text/Terms_of_Use.txt, assets/text/Release_Notes.txt
- hash.boats website: index.html, og-image.svg + regen og-image.png,
site.webmanifest, styles.css comment, splash/confirm/pulse/mark/
lockup svg titles, report/index.html, server/server.js
- CI workflow display names ("Hash Bags Linux build", etc.)
What did NOT change (deliberate):
- Bundle ID / Package: com.suchsoftware.hashwallet (immutable app
identity on App Store + Play Store — changing == orphaning the app)
- Binary name: hash_wallet (Linux executable)
- Dart import paths: package:hash_wallet/...
- Git repo: hash-wallet (Such-Software/hash-wallet)
- URL scheme: hashwallet:// (internal deep links)
- support@such.software (no domain change yet)
- App Store / Play Store listing names (whatever was registered there
stays; we updated launcher label only)
- hash.boats domain (still the wallet site)
Also kept the '#ash Wallet' wordplay in the nav but updated to
'#ash Bags' so the # mark still serves as the H. Nav reads:
[# mark] #ash Bags
Website hero tagline now matches the App Store sub-title concept:
'A wallet for your coins. Open-source, non-custodial, multi-chain.
Privacy-leaning by default.'
108 files modified, ~674 string replacements.
125 lines
4.7 KiB
Dart
125 lines
4.7 KiB
Dart
import 'dart:math';
|
||
|
||
import 'package:hash_wallet/entities/new_ui_entities/list_item/list_item_regular_row.dart';
|
||
import 'package:hash_wallet/generated/i18n.dart';
|
||
import 'package:hash_wallet/new-ui/widgets/modal_page_wrapper.dart';
|
||
import 'package:hash_wallet/new-ui/widgets/receive_page/receive_top_bar.dart';
|
||
import 'package:hash_wallet/src/widgets/cake_image_widget.dart';
|
||
import 'package:hash_wallet/src/widgets/new_list_row/new_list_section.dart';
|
||
import 'package:flutter/material.dart';
|
||
import 'package:url_launcher/url_launcher.dart';
|
||
|
||
// written by people who happened to read my slack message in 2025
|
||
// whoever works on this codebase in the future, feel free to add your own mark here
|
||
const List<String> aboutPageEasterEggs = [
|
||
"Designed in (S)pain",
|
||
"Proudly managing over 🤷♂️ XMR",
|
||
"The cake is not a lie 🍰",
|
||
"I don’t play soccer because I enjoy the sport. I’m just doing it for kicks.",
|
||
"Markets in red? Big deal.\nWhat color is the grass outside?",
|
||
"Conquered Web3, now working on Web6-7",
|
||
"Proud owner of none of your funds\n(we are not impressed)",
|
||
"*writing down my seedphrase*\ncake cake cake cake cake cake cake ca...",
|
||
"Don't forget to actually use your crypto to pay for stuff in the real world 🙂",
|
||
"A chain of blocks? That's preposterous!",
|
||
"IOU a hug <3",
|
||
"Warning: up to 4.8% programmed by cats",
|
||
"We love collecting your data <3\nWe're just really incompetent at it"
|
||
];
|
||
|
||
class AboutPage extends StatefulWidget {
|
||
const AboutPage({super.key, required this.appVersion});
|
||
|
||
final String appVersion;
|
||
|
||
@override
|
||
State<AboutPage> createState() => _AboutPageState();
|
||
}
|
||
|
||
class _AboutPageState extends State<AboutPage> {
|
||
static const int easterEggTreshold = 5;
|
||
String _bottomText = S.current.payment_made_easy;
|
||
int _easterEggCounter = 0;
|
||
|
||
void _easterEgg() {
|
||
_easterEggCounter++;
|
||
if(_easterEggCounter == easterEggTreshold) {
|
||
setState(() {
|
||
_bottomText = aboutPageEasterEggs.elementAt(Random().nextInt(aboutPageEasterEggs.length));
|
||
});
|
||
}
|
||
}
|
||
|
||
@override
|
||
Widget build(BuildContext context) {
|
||
return ModalPageWrapper(
|
||
topBar: ModalTopBar(
|
||
title: S.of(context).about,
|
||
leadingIcon: Icon(Icons.arrow_back_ios_new),
|
||
onLeadingPressed: Navigator.of(context).pop,
|
||
),
|
||
content: Container(
|
||
color: Theme.of(context).colorScheme.surface,
|
||
child: Column(children: [
|
||
Column(
|
||
children: [
|
||
Column(
|
||
spacing: 16,
|
||
children: [
|
||
SizedBox(),
|
||
GestureDetector(
|
||
onTap: _easterEgg,
|
||
child: CakeImageWidget(
|
||
imageUrl: "assets/new-ui/cake_squircle_icon.svg",
|
||
width: 128,
|
||
height: 128,
|
||
),
|
||
),
|
||
Row(
|
||
mainAxisAlignment: MainAxisAlignment.center,
|
||
spacing: 8,
|
||
children: [
|
||
Text(
|
||
"Hash Bags",
|
||
style: TextStyle(fontSize: 32, fontWeight: FontWeight.w500),
|
||
),
|
||
Text(widget.appVersion,
|
||
style: TextStyle(
|
||
fontSize: 32,
|
||
fontWeight: FontWeight.w500,
|
||
color: Theme.of(context).colorScheme.onSurfaceVariant))
|
||
],
|
||
),
|
||
Padding(
|
||
padding: const EdgeInsets.symmetric(horizontal: 12.0),
|
||
child: Wrap(
|
||
children: [
|
||
Text(
|
||
_bottomText,
|
||
textAlign: TextAlign.center,
|
||
style: TextStyle(color: Theme.of(context).colorScheme.onSurfaceVariant),
|
||
),
|
||
],
|
||
),
|
||
),
|
||
],
|
||
),
|
||
SizedBox(height: 32),
|
||
NewListSections(sections: {
|
||
"": [
|
||
ListItemRegularRow(
|
||
keyValue: "gh",
|
||
label: "GitHub",
|
||
onTap: () => launchUrl(Uri.https("github.com", "Such-Software/hash-wallet")),
|
||
trailingIconPath: "assets/new-ui/link_arrow.svg",
|
||
foregroundColor: Theme.of(context).colorScheme.primary,
|
||
trailingIconSize: 10),
|
||
],
|
||
})
|
||
],
|
||
)
|
||
])),
|
||
);
|
||
}
|
||
}
|