ray-finance 0.2.2 → 0.2.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +38 -11
- package/dist/ai/agent.js +16 -3
- package/dist/ai/context.js +6 -2
- package/dist/ai/insights.js +26 -3
- package/dist/ai/redactor.js +11 -0
- package/dist/ai/system-prompt.js +2 -2
- package/dist/ai/tools.js +4 -0
- package/dist/cli/backup.js +18 -9
- package/dist/cli/chat.js +146 -40
- package/dist/cli/format.d.ts +2 -0
- package/dist/cli/format.js +25 -0
- package/dist/cli/index.js +12 -2
- package/dist/cli/setup.js +7 -1
- package/dist/daily-sync.js +19 -4
- package/dist/db/connection.js +9 -1
- package/dist/db/encryption.js +18 -7
- package/dist/db/schema.js +6 -1
- package/dist/public/link.html +47 -24
- package/dist/public/ray-logo-dark.png +0 -0
- package/dist/queries/index.js +8 -8
- package/dist/server.js +33 -1
- package/package.json +7 -2
- package/.claude/settings.local.json +0 -16
- package/.env.example +0 -13
- package/.github/ISSUE_TEMPLATE/bug_report.md +0 -19
- package/.github/ISSUE_TEMPLATE/feature_request.md +0 -9
- package/.github/PULL_REQUEST_TEMPLATE.md +0 -5
- package/.github/workflows/ci.yml +0 -21
- package/CHANGELOG.md +0 -16
- package/CODE_OF_CONDUCT.md +0 -31
- package/CONTRIBUTING.md +0 -41
- package/Dockerfile +0 -8
- package/SECURITY.md +0 -36
- package/SPEC.md +0 -374
- package/docker-compose.yml +0 -9
- package/site/next-env.d.ts +0 -6
- package/site/next.config.ts +0 -7
- package/site/package-lock.json +0 -1661
- package/site/package.json +0 -24
- package/site/postcss.config.mjs +0 -7
- package/site/public/ray-og.jpg +0 -0
- package/site/public/robots.txt +0 -4
- package/site/public/sitemap.xml +0 -8
- package/site/src/app/copy-command.tsx +0 -31
- package/site/src/app/globals.css +0 -87
- package/site/src/app/layout.tsx +0 -64
- package/site/src/app/page.tsx +0 -841
- package/site/src/app/pii-scramble.tsx +0 -190
- package/site/src/app/reveal.tsx +0 -29
- package/site/tsconfig.json +0 -21
- package/src/ai/agent.ts +0 -106
- package/src/ai/audit.ts +0 -11
- package/src/ai/context.ts +0 -93
- package/src/ai/insights.ts +0 -474
- package/src/ai/memory.ts +0 -21
- package/src/ai/redactor.ts +0 -102
- package/src/ai/system-prompt.ts +0 -90
- package/src/ai/tools.ts +0 -716
- package/src/alerts/index.ts +0 -123
- package/src/cli/backup.ts +0 -113
- package/src/cli/chat.ts +0 -105
- package/src/cli/commands.ts +0 -240
- package/src/cli/format.ts +0 -149
- package/src/cli/index.ts +0 -193
- package/src/cli/scheduler.ts +0 -116
- package/src/cli/setup.ts +0 -189
- package/src/config.ts +0 -81
- package/src/daily-sync.ts +0 -155
- package/src/db/connection.ts +0 -38
- package/src/db/encryption.ts +0 -29
- package/src/db/helpers.ts +0 -47
- package/src/db/schema.ts +0 -196
- package/src/index.ts +0 -3
- package/src/plaid/client.ts +0 -25
- package/src/plaid/link.ts +0 -25
- package/src/plaid/sync.ts +0 -219
- package/src/public/link.html +0 -161
- package/src/queries/index.ts +0 -586
- package/src/scoring/index.ts +0 -468
- package/src/server.ts +0 -162
- package/tsconfig.json +0 -16
- /package/{site → dist}/public/favicon.png +0 -0
package/site/package.json
DELETED
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "ray-finance-site",
|
|
3
|
-
"version": "0.1.0",
|
|
4
|
-
"private": true,
|
|
5
|
-
"scripts": {
|
|
6
|
-
"dev": "next dev",
|
|
7
|
-
"build": "next build",
|
|
8
|
-
"start": "next start"
|
|
9
|
-
},
|
|
10
|
-
"dependencies": {
|
|
11
|
-
"geist": "^1.7.0",
|
|
12
|
-
"next": "^15.1.0",
|
|
13
|
-
"react": "^19.0.0",
|
|
14
|
-
"react-dom": "^19.0.0"
|
|
15
|
-
},
|
|
16
|
-
"devDependencies": {
|
|
17
|
-
"@tailwindcss/postcss": "^4.0.0",
|
|
18
|
-
"@types/node": "^22.0.0",
|
|
19
|
-
"@types/react": "^19.0.0",
|
|
20
|
-
"@types/react-dom": "^19.0.0",
|
|
21
|
-
"tailwindcss": "^4.0.0",
|
|
22
|
-
"typescript": "^5.7.0"
|
|
23
|
-
}
|
|
24
|
-
}
|
package/site/postcss.config.mjs
DELETED
package/site/public/ray-og.jpg
DELETED
|
Binary file
|
package/site/public/robots.txt
DELETED
package/site/public/sitemap.xml
DELETED
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
|
|
3
|
-
import { useState } from "react";
|
|
4
|
-
|
|
5
|
-
export function CopyCommand({
|
|
6
|
-
command,
|
|
7
|
-
className = "",
|
|
8
|
-
}: {
|
|
9
|
-
command: string;
|
|
10
|
-
className?: string;
|
|
11
|
-
}) {
|
|
12
|
-
const [copied, setCopied] = useState(false);
|
|
13
|
-
|
|
14
|
-
return (
|
|
15
|
-
<button
|
|
16
|
-
type="button"
|
|
17
|
-
onClick={() => {
|
|
18
|
-
navigator.clipboard.writeText(command);
|
|
19
|
-
setCopied(true);
|
|
20
|
-
setTimeout(() => setCopied(false), 2000);
|
|
21
|
-
}}
|
|
22
|
-
className={`group relative cursor-pointer ${className}`}
|
|
23
|
-
>
|
|
24
|
-
<span className="text-stone-400 font-mono">$</span>{" "}
|
|
25
|
-
<span className="font-mono">{command}</span>
|
|
26
|
-
<span className="ml-0 max-w-0 overflow-hidden whitespace-nowrap text-xs text-stone-400 transition-all duration-300 ease-in-out group-hover:ml-2 group-hover:max-w-[6rem]">
|
|
27
|
-
{copied ? "✓ copied" : "click to copy"}
|
|
28
|
-
</span>
|
|
29
|
-
</button>
|
|
30
|
-
);
|
|
31
|
-
}
|
package/site/src/app/globals.css
DELETED
|
@@ -1,87 +0,0 @@
|
|
|
1
|
-
@import "tailwindcss";
|
|
2
|
-
|
|
3
|
-
@theme {
|
|
4
|
-
--font-sans: var(--font-geist-sans), ui-sans-serif, system-ui, -apple-system, sans-serif;
|
|
5
|
-
--font-mono: var(--font-geist-mono), ui-monospace, monospace;
|
|
6
|
-
--font-pixel: var(--font-geist-pixel-square), monospace;
|
|
7
|
-
|
|
8
|
-
--color-stone-50: #fafaf9;
|
|
9
|
-
--color-stone-100: #f5f5f4;
|
|
10
|
-
--color-stone-200: #e7e5e4;
|
|
11
|
-
--color-stone-300: #d6d3d1;
|
|
12
|
-
--color-stone-400: #a8a29e;
|
|
13
|
-
--color-stone-500: #78716c;
|
|
14
|
-
--color-stone-600: #57534e;
|
|
15
|
-
--color-stone-700: #44403c;
|
|
16
|
-
--color-stone-800: #292524;
|
|
17
|
-
--color-stone-900: #1c1917;
|
|
18
|
-
--color-stone-950: #0c0a09;
|
|
19
|
-
|
|
20
|
-
--color-lime-400: #87da26;
|
|
21
|
-
--color-lime-500: #6ab318;
|
|
22
|
-
--color-lime-600: #548c13;
|
|
23
|
-
|
|
24
|
-
--color-red-400: #f87171;
|
|
25
|
-
--color-amber-300: #fcd34d;
|
|
26
|
-
--color-amber-400: #fbbf24;
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
* {
|
|
30
|
-
-webkit-font-smoothing: antialiased;
|
|
31
|
-
-moz-osx-font-smoothing: grayscale;
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
:focus-visible {
|
|
35
|
-
outline: 2px solid var(--color-lime-400);
|
|
36
|
-
outline-offset: 2px;
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
/* Hero entrance animation */
|
|
40
|
-
@keyframes fade-up {
|
|
41
|
-
from {
|
|
42
|
-
opacity: 0;
|
|
43
|
-
transform: translateY(20px);
|
|
44
|
-
}
|
|
45
|
-
to {
|
|
46
|
-
opacity: 1;
|
|
47
|
-
transform: translateY(0);
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
.animate-fade-up {
|
|
52
|
-
animation: fade-up 0.6s ease-out both;
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
.animate-fade-up-delay-1 {
|
|
56
|
-
animation: fade-up 0.6s ease-out 0.15s both;
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
.animate-fade-up-delay-2 {
|
|
60
|
-
animation: fade-up 0.6s ease-out 0.3s both;
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
/* Scroll-triggered reveal */
|
|
64
|
-
.reveal {
|
|
65
|
-
opacity: 0;
|
|
66
|
-
transform: translateY(16px);
|
|
67
|
-
transition: opacity 0.5s ease-out, transform 0.5s ease-out;
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
.reveal.visible {
|
|
71
|
-
opacity: 1;
|
|
72
|
-
transform: translateY(0);
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
/* Respect reduced motion */
|
|
76
|
-
@media (prefers-reduced-motion: reduce) {
|
|
77
|
-
.animate-fade-up,
|
|
78
|
-
.animate-fade-up-delay-1,
|
|
79
|
-
.animate-fade-up-delay-2 {
|
|
80
|
-
animation: none;
|
|
81
|
-
}
|
|
82
|
-
.reveal {
|
|
83
|
-
opacity: 1;
|
|
84
|
-
transform: none;
|
|
85
|
-
transition: none;
|
|
86
|
-
}
|
|
87
|
-
}
|
package/site/src/app/layout.tsx
DELETED
|
@@ -1,64 +0,0 @@
|
|
|
1
|
-
import type { Metadata } from "next";
|
|
2
|
-
import { GeistSans } from "geist/font/sans";
|
|
3
|
-
import { GeistMono } from "geist/font/mono";
|
|
4
|
-
import { GeistPixelSquare } from "geist/font/pixel";
|
|
5
|
-
import "./globals.css";
|
|
6
|
-
|
|
7
|
-
export const metadata: Metadata = {
|
|
8
|
-
metadataBase: new URL("https://rayfinance.app"),
|
|
9
|
-
title: "Ray — AI Financial Advisor, Running Locally",
|
|
10
|
-
description:
|
|
11
|
-
"An open-source CLI that connects to your bank and gives you AI-powered financial advice — all running locally on your machine.",
|
|
12
|
-
keywords: [
|
|
13
|
-
"AI financial advisor",
|
|
14
|
-
"personal finance CLI",
|
|
15
|
-
"local-first finance",
|
|
16
|
-
"AI budgeting tool",
|
|
17
|
-
"open source finance",
|
|
18
|
-
"Plaid CLI",
|
|
19
|
-
"financial planning AI",
|
|
20
|
-
],
|
|
21
|
-
authors: [{ name: "Clark Dinnison" }],
|
|
22
|
-
alternates: {
|
|
23
|
-
canonical: "/",
|
|
24
|
-
},
|
|
25
|
-
openGraph: {
|
|
26
|
-
title: "Ray — AI Financial Advisor, Running Locally",
|
|
27
|
-
description:
|
|
28
|
-
"An open-source CLI that connects to your bank and gives you AI-powered financial advice — all running locally on your machine.",
|
|
29
|
-
url: "https://rayfinance.app",
|
|
30
|
-
siteName: "Ray Finance",
|
|
31
|
-
type: "website",
|
|
32
|
-
images: [
|
|
33
|
-
{
|
|
34
|
-
url: "/ray-og.jpg",
|
|
35
|
-
width: 1200,
|
|
36
|
-
height: 630,
|
|
37
|
-
alt: "Ray — AI Financial Advisor CLI",
|
|
38
|
-
},
|
|
39
|
-
],
|
|
40
|
-
},
|
|
41
|
-
twitter: {
|
|
42
|
-
card: "summary_large_image",
|
|
43
|
-
title: "Ray — AI Financial Advisor, Running Locally",
|
|
44
|
-
description:
|
|
45
|
-
"An open-source CLI that connects to your bank and gives you AI-powered financial advice — all running locally on your machine.",
|
|
46
|
-
images: ["/ray-og.jpg"],
|
|
47
|
-
},
|
|
48
|
-
icons: {
|
|
49
|
-
icon: "/favicon.png",
|
|
50
|
-
apple: "/favicon.png",
|
|
51
|
-
},
|
|
52
|
-
};
|
|
53
|
-
|
|
54
|
-
export default function RootLayout({
|
|
55
|
-
children,
|
|
56
|
-
}: {
|
|
57
|
-
children: React.ReactNode;
|
|
58
|
-
}) {
|
|
59
|
-
return (
|
|
60
|
-
<html lang="en" className={`${GeistSans.variable} ${GeistMono.variable} ${GeistPixelSquare.variable}`} style={{ colorScheme: "light" }}>
|
|
61
|
-
<body className="bg-stone-50 text-stone-900 font-sans">{children}</body>
|
|
62
|
-
</html>
|
|
63
|
-
);
|
|
64
|
-
}
|