mirror of
https://github.com/hoornet/vega.git
synced 2026-05-06 20:29:12 -07:00
Rename Wrystr to Vega
Named after Jurij Vega (1754-1802), Slovenian mathematician who made knowledge accessible through his logarithm tables. Rebrand before OpenSats application (April 1). - Product name, window title, identifiers, binary name all renamed - Cargo package: wrystr -> vega, wrystr_lib -> vega_lib - PKGBUILD: wrystr -> vega (new AUR package name) - Release workflow: artifact names, release text updated - README: new tagline referencing Jurij Vega - DB migration: auto-renames wrystr.db -> vega.db on first launch - Keyring service name kept as "wrystr" for backward compatibility - localStorage keys kept as wrystr_* to preserve existing user data Pending manual steps: - Rename GitHub repo hoornet/wrystr -> hoornet/vega - Create new AUR package vega-git, orphan wrystr-git - Update local .desktop launcher
This commit is contained in:
@@ -35,7 +35,7 @@ function UpdateBanner() {
|
||||
return (
|
||||
<div className="flex items-center justify-between px-4 py-2 bg-accent/10 border-b border-accent/30 text-[12px] shrink-0">
|
||||
<span className="text-text">
|
||||
Wrystr {version} is available.{" "}
|
||||
Vega {version} is available.{" "}
|
||||
{error && <span className="text-danger ml-1">{error}</span>}
|
||||
</span>
|
||||
<div className="flex items-center gap-3">
|
||||
|
||||
@@ -89,7 +89,7 @@ export function FountainCard({ seg }: { seg: ContentSegment }) {
|
||||
<button
|
||||
onClick={handlePlay}
|
||||
className="shrink-0 w-8 h-8 rounded-full border border-border flex items-center justify-center hover:bg-accent/10 transition-colors"
|
||||
title="Play in Wrystr"
|
||||
title="Play in Vega"
|
||||
>
|
||||
<svg width="10" height="12" viewBox="0 0 10 12" fill="currentColor" className="text-accent ml-0.5">
|
||||
<polygon points="0,0 10,6 0,12" />
|
||||
|
||||
@@ -64,7 +64,7 @@ export function AudioBlock({ sources }: { sources: string[] }) {
|
||||
</div>
|
||||
<div className="min-w-0 flex-1">
|
||||
<div className="text-[12px] text-text truncate">{name}</div>
|
||||
<div className="text-[10px] text-text-dim">audio · play in wrystr</div>
|
||||
<div className="text-[10px] text-text-dim">audio · play in vega</div>
|
||||
</div>
|
||||
</button>
|
||||
);
|
||||
|
||||
@@ -14,7 +14,7 @@ function Shell({ children }: { children: React.ReactNode }) {
|
||||
return (
|
||||
<div className="h-screen w-screen bg-bg flex items-center justify-center">
|
||||
<div className="w-full max-w-md px-8">
|
||||
<div className="text-text-dim text-[10px] font-bold tracking-[0.3em] uppercase mb-8">WRYSTR</div>
|
||||
<div className="text-text-dim text-[10px] font-bold tracking-[0.3em] uppercase mb-8">VEGA</div>
|
||||
{children}
|
||||
</div>
|
||||
</div>
|
||||
@@ -34,9 +34,9 @@ function Body({ children }: { children: React.ReactNode }) {
|
||||
function WelcomeStep({ onCreateNew, onHaveKey }: { onCreateNew: () => void; onHaveKey: () => void }) {
|
||||
return (
|
||||
<Shell>
|
||||
<Heading>Welcome to Wrystr.</Heading>
|
||||
<Heading>Welcome to Vega.</Heading>
|
||||
<Body>
|
||||
Wrystr is a Nostr client — a social platform where you own your identity,
|
||||
Vega is a Nostr client — a social platform where you own your identity,
|
||||
your content, and your social graph. No company can delete your account or
|
||||
censor your posts.
|
||||
</Body>
|
||||
@@ -138,7 +138,7 @@ function BackupStep({ signer, onComplete }: { signer: NDKPrivateKeySigner; onCom
|
||||
<Heading>Save your secret key.</Heading>
|
||||
<Body>
|
||||
Your <strong className="text-text">secret key</strong> is the only way to recover your
|
||||
account. Save it in a password manager, notes app, or write it down. Wrystr never
|
||||
account. Save it in a password manager, notes app, or write it down. Vega never
|
||||
stores it — if you lose it, your account is gone.
|
||||
</Body>
|
||||
|
||||
@@ -187,7 +187,7 @@ function BackupStep({ signer, onComplete }: { signer: NDKPrivateKeySigner; onCom
|
||||
disabled={!confirmed || saving}
|
||||
className="w-full py-2.5 text-[13px] font-medium bg-accent hover:bg-accent-hover text-white transition-colors disabled:opacity-30 disabled:cursor-not-allowed"
|
||||
>
|
||||
{saving ? "Setting up…" : "Start using Wrystr"}
|
||||
{saving ? "Setting up…" : "Start using Vega"}
|
||||
</button>
|
||||
</Shell>
|
||||
);
|
||||
|
||||
@@ -8,7 +8,7 @@ const DEV_PUBKEY = "c897e36007f7e52d52569439d43bffa903ea2fb845b84936f676b62e9e51
|
||||
const LIGHTNING_ADDRESS = "harpos@getalby.com";
|
||||
const BITCOIN_ADDRESS = "bc1qcgaupf80j28ca537xjlcs9dm9s03khezjs7crp";
|
||||
const KOFI_URL = "https://ko-fi.com/jure";
|
||||
const GITHUB_URL = "https://github.com/hoornet/wrystr";
|
||||
const GITHUB_URL = "https://github.com/hoornet/vega";
|
||||
const GITHUB_SPONSORS_URL = "https://github.com/sponsors/hoornet";
|
||||
|
||||
function CopyButton({ text }: { text: string }) {
|
||||
@@ -50,9 +50,9 @@ export function AboutView() {
|
||||
<div className="max-w-xl mx-auto px-6 py-8">
|
||||
{/* Header */}
|
||||
<div className="mb-8">
|
||||
<h1 className="text-text text-lg font-medium tracking-tight mb-2">Support Wrystr</h1>
|
||||
<h1 className="text-text text-lg font-medium tracking-tight mb-2">Support Vega</h1>
|
||||
<p className="text-text-muted text-[13px] leading-relaxed">
|
||||
Wrystr is free, open-source, and built by one person. If it's useful to you,
|
||||
Vega is free, open-source, and built by one person. If it's useful to you,
|
||||
any support — a zap, a share, a star on GitHub — genuinely helps.
|
||||
</p>
|
||||
</div>
|
||||
@@ -61,7 +61,7 @@ export function AboutView() {
|
||||
<section className="mb-8">
|
||||
<h2 className="text-text-dim text-[10px] uppercase tracking-widest mb-3">⚡ Zap the developer</h2>
|
||||
<p className="text-text-muted text-[12px] mb-3">
|
||||
Send sats directly from Wrystr using your connected Lightning wallet.
|
||||
Send sats directly from Vega using your connected Lightning wallet.
|
||||
</p>
|
||||
<button
|
||||
onClick={() => setShowZap(true)}
|
||||
@@ -130,7 +130,7 @@ export function AboutView() {
|
||||
{/* Version / About */}
|
||||
<section className="border-t border-border pt-6">
|
||||
<div className="text-text-dim text-[11px] space-y-1">
|
||||
<div>Wrystr v{pkg.version} — MIT License — Copyright (c) 2026 Jure Sršen</div>
|
||||
<div>Vega v{pkg.version} — MIT License — Copyright (c) 2026 Jure Sršen</div>
|
||||
<div>
|
||||
Built with{" "}
|
||||
<a href="https://tauri.app" target="_blank" rel="noopener noreferrer" className="text-accent hover:text-accent-hover transition-colors">Tauri</a>
|
||||
|
||||
@@ -183,7 +183,7 @@ function ExportSection() {
|
||||
setErrorMsg(null);
|
||||
try {
|
||||
const filePath = await save({
|
||||
defaultPath: `wrystr-export-${new Date().toISOString().slice(0, 10)}.json`,
|
||||
defaultPath: `vega-export-${new Date().toISOString().slice(0, 10)}.json`,
|
||||
filters: [{ name: "JSON", extensions: ["json"] }],
|
||||
});
|
||||
if (!filePath) {
|
||||
|
||||
@@ -53,7 +53,7 @@ export function Sidebar() {
|
||||
/* Expanded: brand on left, collapse chevron on right */
|
||||
<>
|
||||
<div className="flex flex-col">
|
||||
<span className="text-sm font-bold tracking-widest text-text select-none">WRYSTR</span>
|
||||
<span className="text-sm font-bold tracking-widest text-text select-none">VEGA</span>
|
||||
<span className="text-text-dim text-[9px] font-mono opacity-50">v{pkg.version}</span>
|
||||
</div>
|
||||
<button
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
const isDev = import.meta.env.DEV;
|
||||
|
||||
export const debug = {
|
||||
log: (...args: unknown[]) => { if (isDev) console.log("[Wrystr]", ...args); },
|
||||
warn: (...args: unknown[]) => { if (isDev) console.warn("[Wrystr]", ...args); },
|
||||
error: (...args: unknown[]) => { if (isDev) console.error("[Wrystr]", ...args); },
|
||||
log: (...args: unknown[]) => { if (isDev) console.log("[Vega]", ...args); },
|
||||
warn: (...args: unknown[]) => { if (isDev) console.warn("[Vega]", ...args); },
|
||||
error: (...args: unknown[]) => { if (isDev) console.error("[Vega]", ...args); },
|
||||
};
|
||||
|
||||
@@ -7,7 +7,7 @@ export function withTimeout<T>(promise: Promise<T>, ms: number, fallback: T): Pr
|
||||
return Promise.race([
|
||||
promise,
|
||||
new Promise<T>((resolve) => setTimeout(() => {
|
||||
console.warn(`[Wrystr] Fetch timed out after ${ms}ms`);
|
||||
console.warn(`[Vega] Fetch timed out after ${ms}ms`);
|
||||
resolve(fallback);
|
||||
}, ms)),
|
||||
]);
|
||||
@@ -110,12 +110,12 @@ export async function resetNDK(): Promise<void> {
|
||||
}
|
||||
|
||||
// Connect fresh
|
||||
console.log("[Wrystr] NDK instance reset — connecting fresh relays");
|
||||
console.log("[Vega] NDK instance reset — connecting fresh relays");
|
||||
await ndk.connect();
|
||||
await waitForConnectedRelay(ndk, 5000);
|
||||
const relays = Array.from(ndk.pool?.relays?.values() ?? []);
|
||||
const connected = relays.filter((r) => r.connected).length;
|
||||
console.log(`[Wrystr] Fresh connection: ${connected}/${relays.length} relays connected`);
|
||||
console.log(`[Vega] Fresh connection: ${connected}/${relays.length} relays connected`);
|
||||
}
|
||||
|
||||
export function addRelay(url: string): void {
|
||||
@@ -186,17 +186,17 @@ export async function ensureConnected(): Promise<boolean> {
|
||||
return true; // Trust relay.connected — don't probe or disconnect
|
||||
}
|
||||
|
||||
console.warn(`[Wrystr] No relays connected (${relays.length} in pool) — attempting reconnect`);
|
||||
console.warn(`[Vega] No relays connected (${relays.length} in pool) — attempting reconnect`);
|
||||
|
||||
try {
|
||||
await withTimeout(instance.connect(), 4000, undefined);
|
||||
await waitForConnectedRelay(instance, 3000);
|
||||
const after = Array.from(instance.pool?.relays?.values() ?? []);
|
||||
const nowConnected = after.some((r) => r.connected);
|
||||
console.log(`[Wrystr] Reconnect ${nowConnected ? "succeeded" : "failed"}`);
|
||||
console.log(`[Vega] Reconnect ${nowConnected ? "succeeded" : "failed"}`);
|
||||
return nowConnected;
|
||||
} catch {
|
||||
console.error("[Wrystr] Reconnect failed");
|
||||
console.error("[Vega] Reconnect failed");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16,7 +16,7 @@ async function getSearchNDK(): Promise<NDK> {
|
||||
if (searchNDK) return searchNDK;
|
||||
searchNDK = new NDK({ explicitRelayUrls: SEARCH_RELAYS });
|
||||
searchNDKConnecting = searchNDK.connect().then(() => {
|
||||
console.log("[Wrystr] Search relays connected");
|
||||
console.log("[Vega] Search relays connected");
|
||||
searchNDKConnecting = null;
|
||||
});
|
||||
await withTimeout(searchNDKConnecting, 5000, undefined);
|
||||
|
||||
@@ -20,7 +20,7 @@ async function apiHeaders(): Promise<Record<string, string>> {
|
||||
"X-Auth-Key": API_KEY,
|
||||
"X-Auth-Date": apiHeaderTime,
|
||||
"Authorization": hash,
|
||||
"User-Agent": "Wrystr/1.0",
|
||||
"User-Agent": "Vega/1.0",
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -48,7 +48,7 @@ export async function uploadImage(file: File): Promise<string> {
|
||||
* through Tauri's HTTP plugin, so we construct the raw bytes ourselves.
|
||||
*/
|
||||
function buildMultipart(fieldName: string, data: Uint8Array, fileName: string, mimeType: string): { body: Uint8Array; contentType: string } {
|
||||
const boundary = "----WrystrUpload" + Math.random().toString(36).slice(2);
|
||||
const boundary = "----VegaUpload" + Math.random().toString(36).slice(2);
|
||||
const encoder = new TextEncoder();
|
||||
|
||||
const header = encoder.encode(
|
||||
|
||||
@@ -202,7 +202,7 @@ export const useFeedStore = create<FeedState>((set, get) => ({
|
||||
});
|
||||
|
||||
liveSub = sub;
|
||||
console.log("[Wrystr] Live feed subscription started");
|
||||
console.log("[Vega] Live feed subscription started");
|
||||
},
|
||||
|
||||
loadTrendingFeed: async (force?: boolean) => {
|
||||
|
||||
Reference in New Issue
Block a user