no-fi-skill 0.0.0-stage → 0.2.1

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/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Paul van Oijen
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -1,3 +1,159 @@
1
- # Temporary Holding Version
1
+ ![no-fi: wireframes without the distraction](https://raw.githubusercontent.com/p-a-u-l-i-e/no-fi/main/assets/banner.png)
2
2
 
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.
3
+ # no-fi
4
+
5
+ **Wireframes without the distraction.** no-fi is an agent skill that draws UI as plain text, so a team argues about layout, content, and flow instead of color and type.
6
+
7
+ Ask for a screen and Claude answers with a monospaced drawing: boxes, fields, buttons, tables, and bar charts made from plain characters. There are no colors, fonts, or icons to react to, so the only thing left to discuss is structure.
8
+
9
+ ## Contents
10
+
11
+ - [What it looks like](#what-it-looks-like)
12
+ - [Install](#install)
13
+ - [Use it](#use-it)
14
+ - [The rules](#the-rules)
15
+ - [The vocabulary](#the-vocabulary)
16
+ - [Examples](#examples)
17
+ - [Check your work](#check-your-work)
18
+ - [Repository layout](#repository-layout)
19
+
20
+ ## What it looks like
21
+
22
+ ```
23
+ ╔══════════════════════════════════════╗
24
+ ║ SIGN IN ║
25
+ ║ ║
26
+ ║ ┌──────────────────────────────────┐ ║
27
+ ║ │ Email │ ║
28
+ ║ │ [ ana@acme.com_______________ ] │ ║
29
+ ║ │ │ ║
30
+ ║ │ Password │ ║
31
+ ║ │ [ ************_______________ ] │ ║
32
+ ║ │ │ ║
33
+ ║ │ [[ Sign in ]] [ Forgot? ] │ ║
34
+ ║ └──────────────────────────────────┘ ║
35
+ ╚══════════════════════════════════════╝
36
+ ```
37
+
38
+ The outer frame is double-lined, every box inside it is single-lined, and the primary button gets double brackets. Larger screens are in [Examples](#examples).
39
+
40
+ ## Install
41
+
42
+ Pick one. Each puts the `no-fi/` folder where your agent loads skills from.
43
+
44
+ **With npx**
45
+
46
+ ```sh
47
+ npx no-fi-skill
48
+ ```
49
+
50
+ This copies the skill into `~/.claude/skills/no-fi`. Add `--project` to install it into `./.claude/skills/no-fi` instead, and `--force` to replace an existing install.
51
+
52
+ **With the skills CLI**
53
+
54
+ ```sh
55
+ npx skills add p-a-u-l-i-e/no-fi --skill no-fi
56
+ ```
57
+
58
+ **By hand**
59
+
60
+ ```sh
61
+ git clone https://github.com/p-a-u-l-i-e/no-fi.git
62
+ cp -R no-fi/no-fi ~/.claude/skills/
63
+ ```
64
+
65
+ **On claude.ai**
66
+
67
+ Download the repository as a ZIP and upload it under Settings, Capabilities, Skills.
68
+
69
+ The skill is plain text and a few small scripts, so you can read every file before you install it.
70
+
71
+ ## Use it
72
+
73
+ Ask for a screen the way you would ask a designer for a sketch:
74
+
75
+ > Wireframe a send-money form with three steps.
76
+ >
77
+ > Draw the settings page for notification preferences.
78
+ >
79
+ > Let's talk through the transactions table before we design it.
80
+
81
+ Claude replies with a fenced code block, runs the checker on it, and adds a note below the drawing for anything that needs a visual described in words.
82
+
83
+ ## The rules
84
+
85
+ Seven rules keep every wireframe readable. The full text is in [`no-fi/SKILL.md`](no-fi/SKILL.md).
86
+
87
+ 1. **Plain characters, plus box-drawing.** Printable ASCII, box-drawing borders, and block characters for bars and charts. No emoji, no tabs.
88
+ 2. **Double outside, single inside.** The outermost container uses double lines. Every box inside it uses single lines.
89
+ 3. **Fixed width.** No line is longer than 80 characters, and every box is the same width on every row.
90
+ 4. **Code block.** Output is always a fenced block, so alignment holds.
91
+ 5. **Describe, don't decorate.** No colors, fonts, or icons. Name anything visual in a note below the drawing.
92
+ 6. **Use the vocabulary.** Draw each element as the tables show. Don't invent symbols.
93
+ 7. **Validate.** Run the checker and fix every failure before showing the result.
94
+
95
+ ## The vocabulary
96
+
97
+ 44 elements in 7 groups: Structure, Fields, Buttons, Feedback, Navigation, Data, and Charts. Each element looks like the component it stands for:
98
+
99
+ - An **input** is one line. A **textarea** is a taller card with a `//` grip.
100
+ - A **badge** is a pill, `( Paid )`. A **tag** is removable, `<Food x>`.
101
+ - A **button** has brackets, and the **primary** one has double brackets.
102
+ - Open states are drawn open: a **select** with its menu below, an **accordion** with its content under it.
103
+ - **Modals**, **toasts**, and **tooltips** are cards drawn inside the screen they sit on.
104
+
105
+ The complete table, with a drawing and a note for each element, is in [`no-fi/SKILL.md`](no-fi/SKILL.md). The same data is in [`no-fi/vocabulary.json`](no-fi/vocabulary.json).
106
+
107
+ ## Examples
108
+
109
+ Seven finished screens in [`no-fi/examples/`](no-fi/examples), built to use the whole vocabulary:
110
+
111
+ | Screen | File |
112
+ | --- | --- |
113
+ | Fintech dashboard | [`fintech-dashboard.txt`](no-fi/examples/fintech-dashboard.txt) |
114
+ | Send money form | [`send-money-form.txt`](no-fi/examples/send-money-form.txt) |
115
+ | Transactions table | [`transactions-table.txt`](no-fi/examples/transactions-table.txt) |
116
+ | Spending report | [`spending-report.txt`](no-fi/examples/spending-report.txt) |
117
+ | Card details | [`card-details.txt`](no-fi/examples/card-details.txt) |
118
+ | Notification settings | [`settings-notifications.txt`](no-fi/examples/settings-notifications.txt) |
119
+ | Activity patterns | [`activity-patterns.txt`](no-fi/examples/activity-patterns.txt) |
120
+
121
+ ## Check your work
122
+
123
+ Two scripts ship with the skill. Each comes in Node and Python, with the same output.
124
+
125
+ **Check a wireframe**
126
+
127
+ ```sh
128
+ node no-fi/scripts/check_wireframe.mjs wireframe.txt
129
+ python3 no-fi/scripts/check_wireframe.py wireframe.txt
130
+ npx no-fi-skill check wireframe.txt
131
+ ```
132
+
133
+ It fails on unsupported characters, tabs, ASCII box borders, boxes that don't close or line up, mixed double and single lines in one box, a double-line box nested inside another box, table dividers that don't land in the same column, progress bars whose fill disagrees with their percentage, bar chart rows whose length disagrees with their value, heatmaps without a legend, and column charts that don't say what a row is worth.
134
+
135
+ **Check vocabulary coverage**
136
+
137
+ ```sh
138
+ node no-fi/scripts/check_coverage.mjs
139
+ python3 no-fi/scripts/check_coverage.py
140
+ ```
141
+
142
+ It confirms every vocabulary element appears in at least one example screen.
143
+
144
+ ## Repository layout
145
+
146
+ ```
147
+ no-fi/ the skill
148
+ SKILL.md rules and vocabulary tables
149
+ vocabulary.json the element vocabulary as data
150
+ examples/ finished example screens
151
+ scripts/ wireframe and coverage checks
152
+ bin/no-fi-skill.mjs the npx no-fi-skill command
153
+ assets/ README images
154
+ site/ the no-fi.dev site
155
+ ```
156
+
157
+ ## License
158
+
159
+ [MIT](LICENSE)
@@ -0,0 +1,67 @@
1
+ #!/usr/bin/env node
2
+ // npx no-fi-skill Install the skill into ~/.claude/skills/no-fi.
3
+ // npx no-fi-skill --project Install it into ./.claude/skills/no-fi instead.
4
+ // npx no-fi-skill check FILE Run the wireframe checker.
5
+ import { spawnSync } from "node:child_process";
6
+ import fs from "node:fs";
7
+ import os from "node:os";
8
+ import path from "node:path";
9
+ import { fileURLToPath } from "node:url";
10
+
11
+ const root = path.join(path.dirname(fileURLToPath(import.meta.url)), "..");
12
+ const skill = path.join(root, "no-fi");
13
+ const { version } = JSON.parse(fs.readFileSync(path.join(root, "package.json"), "utf8"));
14
+
15
+ const usage = `no-fi ${version}: wireframes without the distraction.
16
+
17
+ Usage:
18
+ npx no-fi-skill Install the skill into ~/.claude/skills/no-fi
19
+ npx no-fi-skill --project Install it into ./.claude/skills/no-fi
20
+ npx no-fi-skill --force Replace an existing install
21
+ npx no-fi-skill check FILE [FILE] Check wireframes
22
+
23
+ More: https://no-fi.dev`;
24
+
25
+ const skip = new Set(["__pycache__", ".DS_Store"]);
26
+
27
+ function install(flags) {
28
+ const project = flags.has("--project");
29
+ const target = path.join(project ? process.cwd() : os.homedir(), ".claude", "skills", "no-fi");
30
+ const shown = project ? "./.claude/skills/no-fi" : "~/.claude/skills/no-fi";
31
+ const exists = fs.existsSync(target);
32
+ if (exists && !flags.has("--force")) {
33
+ console.error(`${shown} already exists. Run again with --force to replace it.`);
34
+ return 1;
35
+ }
36
+ fs.rmSync(target, { recursive: true, force: true });
37
+ fs.cpSync(skill, target, { recursive: true, filter: (src) => !skip.has(path.basename(src)) });
38
+ console.log(`${exists ? "Updated" : "Installed"} no-fi ${version} in ${shown}`);
39
+ return 0;
40
+ }
41
+
42
+ function check(files) {
43
+ const script = path.join(skill, "scripts", "check_wireframe.mjs");
44
+ return spawnSync(process.execPath, [script, ...files], { stdio: "inherit" }).status ?? 1;
45
+ }
46
+
47
+ function main(args) {
48
+ if (args.includes("-h") || args.includes("--help")) {
49
+ console.log(usage);
50
+ return 0;
51
+ }
52
+ if (args.includes("-v") || args.includes("--version")) {
53
+ console.log(version);
54
+ return 0;
55
+ }
56
+ if (args[0] === "check") return check(args.slice(1));
57
+
58
+ const flags = new Set(args);
59
+ const unknown = args.filter((arg) => !["--project", "--force"].includes(arg));
60
+ if (unknown.length) {
61
+ console.error(`Unknown argument: ${unknown[0]}\n\n${usage}`);
62
+ return 2;
63
+ }
64
+ return install(flags);
65
+ }
66
+
67
+ process.exit(main(process.argv.slice(2)));
package/no-fi/SKILL.md ADDED
@@ -0,0 +1,178 @@
1
+ ---
2
+ name: no-fi
3
+ description: Draw low-fidelity UI wireframes and charts as plain text, so people can discuss layout, content, and flow without being distracted by visual design. Use when the user asks for a wireframe, layout sketch, screen flow, dashboard, or to "talk through" a screen before any visuals exist. Output is text only, in a code block, with no emoji, color, or images.
4
+ ---
5
+
6
+ # no-fi
7
+
8
+ Draw screens as monospaced text. The goal is to make the conversation about structure, content, and flow, not color, type, or polish.
9
+
10
+ ## Rules
11
+
12
+ 1. **Plain characters, plus box-drawing.** Printable ASCII, the box-drawing characters used for borders (`╔ ═ ╗ ║ ╚ ╝` and `┌ ─ ┐ │ └ ┘ ├ ┤ ┬ ┴ ┼`), and block characters for progress bars and charts (`▮ ▯ █ ▒ ░ ▓`, the horizontal eighths `▏▎▍▌▋▊▉`, and the vertical steps `▁▂▃▄▅▆▇`). No emoji, no tabs.
13
+ 2. **Double outside, single inside.** The outermost container is drawn with double lines `╔═╗`. Every box inside it uses single lines `┌─┐`.
14
+ 3. **Fixed width.** Keep every line at 80 characters or fewer. Every box is exactly as wide on every row.
15
+ 4. **Code block.** Always wrap the output in a fenced block with no language tag, so monospacing and alignment hold.
16
+ 5. **Describe, don't decorate.** No colors, fonts, or icons. If something needs a visual, name it in words in a note below the drawing.
17
+ 6. **Use the vocabulary.** Draw each element the way the tables below show it. Do not invent a symbol. If an element is missing, draw the closest one and say what it is in a note.
18
+ 7. **Validate.** Run the checker before showing the result:
19
+
20
+ ```sh
21
+ node no-fi/scripts/check_wireframe.mjs path/to/wireframe.txt
22
+ ```
23
+
24
+ Without Node, `python3 no-fi/scripts/check_wireframe.py` gives the same output.
25
+
26
+ It fails on unsupported characters, tabs, ASCII box borders, boxes that don't close or line up, mixed double and single lines in one box, a double-line box nested inside another box, table dividers that don't land in the same column top and bottom, progress bars whose fill disagrees with their percentage, bar chart rows whose length disagrees with their value and stated unit, heatmaps without a legend, and column charts that don't say what a row is worth. Fix every failure before presenting the wireframe.
27
+
28
+ ## Draw it like the UI it stands for
29
+
30
+ Each element should look like the component it represents, not a character that hints at it.
31
+
32
+ - A one-line field is an **input**. A taller card with a `//` grip is a **textarea**. They are never interchangeable.
33
+ - A bare `!` is not a component. Use an **alert** (a card with an icon) for messages and a **field error** under a field.
34
+ - A **badge** is a pill, `( Paid )`. A **tag** is removable, `<Food x>`. A **button** has brackets, and the **primary** one has double brackets.
35
+ - Open states are drawn open: a **select** with its **menu** below, an **accordion** with its content under it.
36
+ - Floating things (**modal**, **toast**, **tooltip**) are cards drawn inside the screen they sit on.
37
+
38
+ ## Vocabulary
39
+
40
+ <!-- vocabulary:start -->
41
+
42
+ ### Structure
43
+
44
+ | Element | Draw as | Notes |
45
+ | --- | --- | --- |
46
+ | Screen | the outermost container, in double lines: `╔═╗ ║ ╚═╝`. One per wireframe. | Double lines mean the outer frame. |
47
+ | Card | any box inside the screen, in single lines: `┌─┐ │ └─┘` | Single lines mean a nested box. Blank line between stacked cards. |
48
+ | Heading | `SECTION NAME` in capitals, underlined with `═════` for a major section | Capitals. Underline with a double rule for a major section. |
49
+ | Divider | `─────` across a screen, or `├─────┤` across a card | A rule between groups. |
50
+ | Placeholder | `[image: description]` inside a card | Say what goes there. |
51
+ | Skeleton | `xxxxxxxx xxxxx` for content still loading | Content that has not arrived yet. |
52
+ | Annotation | `<-- note` beside an element. A design note, not part of the UI. | Design notes live outside the UI. |
53
+
54
+ ### Fields
55
+
56
+ | Element | Draw as | Notes |
57
+ | --- | --- | --- |
58
+ | Input | `[ value________ ]` on one line, label above | One line. Label above, value inside. |
59
+ | Textarea | a card several lines tall with a `//` resize grip in the bottom-right | Taller than an input. The grip tells them apart. |
60
+ | Search | `[? Search_____]` | A question mark marks it as search. |
61
+ | Select | `[ Choose v ]` | v marks the menu. |
62
+ | Menu | a card directly under an open select, `>` marks the highlighted row | The open state of a select. |
63
+ | Checkbox | `[x]` checked, `[ ]` unchecked | x means checked. |
64
+ | Radio | `(*)` selected, `( )` unselected | Star means selected. |
65
+ | Toggle | `[ON ]` / `[OFF]` | Always four characters wide. |
66
+ | Slider | `[----o-------]` with the value beside it | o is the handle. |
67
+ | Required | `Name *` | Star after the label. |
68
+ | Field error | `(!) message` on the line directly under the field | Sits under the field it belongs to. |
69
+
70
+ ### Buttons
71
+
72
+ | Element | Draw as | Notes |
73
+ | --- | --- | --- |
74
+ | Primary button | `[[ Save ]]`, last in a row | Double brackets. One per view. |
75
+ | Button | `[ Cancel ]` | Single brackets. Secondary actions. |
76
+ | Icon button | `[ + ]`, `[ ... ]`, `[ ? ]` | A symbol alone. Name it in a note. |
77
+ | Disabled | `[- Continue -]`, dashes mark it as dimmed | Say why, in a tooltip or note. |
78
+
79
+ ### Feedback
80
+
81
+ | Element | Draw as | Notes |
82
+ | --- | --- | --- |
83
+ | Alert | a full-width card with a status icon: `(!)` warning, `(i)` info, `(ok)` success, `(x)` error | Icon, message, optional action. |
84
+ | Toast | a small card with an icon, a short message, and `x` to close | Brief. Always closes with x. |
85
+ | Modal | a card inside the screen with a capitalized title, `x`, a divider, body, and actions | Sits inside the screen it covers. |
86
+ | Tooltip | a small card under its element, with `^` pointing up at it | Caret points at the trigger. |
87
+ | Badge | `( Paid )` status pill, `(3)` count | Pill for status, bare number for a count. |
88
+ | Tag | `<Food x>` removable filter | x removes it. |
89
+ | Avatar | `(AN)` initials in a circle | A person or account. |
90
+
91
+ ### Navigation
92
+
93
+ | Element | Draw as | Notes |
94
+ | --- | --- | --- |
95
+ | Tabs | `[ Active ] Other More` | Active tab is bracketed. |
96
+ | Breadcrumb | `Home > Cards > Visa` | Greater-than between levels. |
97
+ | Pagination | `< 1 [2] 3 4 >` | Current page in brackets. |
98
+ | Stepper | `*-----o-----o` with step names below | Star is reached, o is still ahead. |
99
+ | Accordion | `v Open` with content below it, `> Closed` | v is open, > is closed. |
100
+ | Link | `Label >` | Greater-than after the label. |
101
+
102
+ ### Data
103
+
104
+ | Element | Draw as | Notes |
105
+ | --- | --- | --- |
106
+ | Table | a card with `┬ ┼ ┴` column dividers, header in capitals, `v` or `^` marks the sort | Sort arrow beside the sorted column. |
107
+ | Delta | `^ +2.1%` up, `v -3.4%` down | Arrow and signed number. |
108
+ | Progress | `[=======---] 70%`, `[ ▮▮▮▮▯▯▯▯ ] 50%`, or `[ ████▒▒▒▒ ] 50%` | Three styles. The fill matches the percent. |
109
+
110
+ ### Charts
111
+
112
+ | Element | Draw as | Notes |
113
+ | --- | --- | --- |
114
+ | Bar chart | `Rent Co ████████████ $1,200`: one `█` per fixed unit, and `▏▎▍▌▋▊▉` add eighths. ASCII fallback: `#` | State the unit of one █. The partial block is the remainder. |
115
+ | Column chart | `███` columns, one row per fixed unit, a `▁▂▃▄▅▆▇` top for the remainder, `───` baseline, labels below. ASCII fallback: `###` | State what one row is worth. The partial top is the remainder. |
116
+ | Line chart | `*` points against a `$400 │` axis and a `└────` baseline | Label the top, middle, and bottom of the axis. |
117
+ | Sparkline | `▁▂▃▄▅▆▇█` from low to high. ASCII fallback: `~` then `_ . - = + * #` | A trend with no axis. |
118
+ | Stacked bar | `[FFFHHHHTO]` with a legend mapping each letter | One letter per share. Legend below. |
119
+ | Heatmap | blank, `░ ▒ ▓ █` from light to dark, two characters per cell, with a `Low ░ ▒ ▓ █ High` legend. ASCII fallback: `. : - = + * # % @` | Always draw the legend. |
120
+
121
+ <!-- vocabulary:end -->
122
+
123
+ ## Charts
124
+
125
+ - Draw charts with block characters. Each one has an ASCII fallback for places that can't show blocks: `#` for bars, `###` for columns, `~_.-=+*#` for sparklines, and `. : - = + * # % @` for heatmaps. Use one style within a chart.
126
+ - State what one unit is: `(one █ is $100)`, `(one row is $25)`. The checker compares each bar's length to its value.
127
+ - Use the partial block for the remainder, so 4.1 units is `████▏`, not `████`. A value under one unit is just the partial block.
128
+ - Label the top, middle, and bottom of an axis, and the first and last point on the x axis.
129
+ - Keep a chart under about eight rows or columns. Summarise the rest in words.
130
+ - A bar's fill must agree with its label. The checker enforces this for progress bars and bar charts.
131
+ - Always draw a legend for stacked bars and heatmaps. The checker requires `Low ░ ▒ ▓ █ High` for a shaded heatmap.
132
+
133
+ ## Layout
134
+
135
+ - Sketch the frame first, then fill in content. Confirm the frame before adding detail.
136
+ - Use one width per kind of screen so right edges line up across a set: 80 columns for a full screen, 49 for a form.
137
+ - Right-align anything that sits at the right of a row (actions, totals, a toast), so every row ends on the same column.
138
+ - Leave one blank line between stacked cards.
139
+ - Put side-by-side cards on the same rows, with a 2-character gap between them.
140
+ - Show hierarchy with capitals, rules, and nesting, not with size.
141
+
142
+ ## Output format
143
+
144
+ 1. The wireframe, in one fenced block.
145
+ 2. A short list of notes for anything the drawing cannot show: states, interactions, data sources.
146
+ 3. The checker result, if it was run.
147
+
148
+ ## Example
149
+
150
+ ```
151
+ ╔═════════════════════════════════════╗
152
+ ║ SIGN IN ║
153
+ ║ ═══════════════════════════════════ ║
154
+ ║ ║
155
+ ║ Email * ║
156
+ ║ [ ana@acme.co____________________ ] ║
157
+ ║ ║
158
+ ║ Password * ║
159
+ ║ [ ************___________________ ] ║
160
+ ║ (!) Wrong email or password ║
161
+ ║ ║
162
+ ║ [ ] Remember me ║
163
+ ║ ║
164
+ ║ Forgot password > [[ Sign in ]] ║
165
+ ╚═════════════════════════════════════╝
166
+ ```
167
+
168
+ Seven full screens that use every element are in `examples/`. `scripts/check_coverage.mjs` confirms that none of the vocabulary goes unused.
169
+
170
+ ## Maintaining the vocabulary
171
+
172
+ `vocabulary.json` is the source of truth. After editing it, run:
173
+
174
+ ```sh
175
+ python3 no-fi/scripts/sync_vocabulary.py # rewrite the tables above
176
+ node no-fi/scripts/check_coverage.mjs # every element appears in an example
177
+ node no-fi/scripts/check_wireframe.mjs no-fi/examples/*.txt
178
+ ```
@@ -0,0 +1,31 @@
1
+ ╔══════════════════════════════════════════════════════════════════════════════╗
2
+ ║ ACTIVITY PATTERNS ║
3
+ ║ ════════════════════════════════════════════════════════════════════════════ ║
4
+ ║ ║
5
+ ║ Average spend per weekday (one row is $25) ║
6
+ ║ ███ ▄▄▄ ║
7
+ ║ ▂▂▂ ███ ███ ║
8
+ ║ ▆▆▆ ███ ███ ███ ▁▁▁ ║
9
+ ║ ▄▄▄ ███ ███ ███ ███ ███ ║
10
+ ║ ███ ███ ███ ███ ███ ███ ███ ║
11
+ ║ ███ ███ ███ ███ ███ ███ ███ ║
12
+ ║ ─── ─── ─── ─── ─── ─── ─── ║
13
+ ║ Mon Tue Wed Thu Fri Sat Sun ║
14
+ ║ ║
15
+ ║ Transactions by hour (2-hour bins) ║
16
+ ║ 00 04 08 12 16 20 ║
17
+ ║ Mon ░░░░▒▒▒▒▒▒░░░░ ║
18
+ ║ Tue ░░░░▒▒▓▓▒▒░░░░ ║
19
+ ║ Wed ░░░░▒▒▒▒▒▒░░░░ ║
20
+ ║ Thu ░░░░▓▓▓▓▓▓▒▒░░ ║
21
+ ║ Fri ░░░░▒▒████▓▓▓▓░░ <-- lunch peak ║
22
+ ║ Sat ░░▒▒▒▒▒▒▓▓▓▓▒▒▒▒ ║
23
+ ║ Sun ░░░░▒▒▒▒▒▒░░░░ ║
24
+ ║ ║
25
+ ║ Low ░ ▒ ▓ █ High ║
26
+ ║ ║
27
+ ║ Trends, last 30 days ║
28
+ ║ Food ▃▂▃▄▆█▇▅▄▃▂▂ $640 v -2.0% ║
29
+ ║ Housing ▅▅▅▅▅▅▅▅▅▅▅▆ $1,200 ^ +1.2% ║
30
+ ║ Travel ▁▁▂▃▅█▇▆▄▂▁▂ $310 ^ +8.5% ║
31
+ ╚══════════════════════════════════════════════════════════════════════════════╝
@@ -0,0 +1,36 @@
1
+ ╔══════════════════════════════════════════════════════════════════════════════╗
2
+ ║ Home > Cards > Visa ****4821 ║
3
+ ║ ║
4
+ ║ CARD CONTROLS [ ... ] ║
5
+ ║ ════════════════════════════════════════════════════════════════════════════ ║
6
+ ║ ║
7
+ ║ ┌──────────────────────────────────────┐ ┌────────────────────────────────┐ ║
8
+ ║ │ │ │ Freeze card [OFF] │ ║
9
+ ║ │ [image: card front] │ │ Tap to pay [ON ] │ ║
10
+ ║ │ │ │ │ ║
11
+ ║ │ │ │ [ Freeze ] <-- asks first │ ║
12
+ ║ └──────────────────────────────────────┘ └────────────────────────────────┘ ║
13
+ ║ ║
14
+ ║ v Limits ║
15
+ ║ Daily spend [-------o----] $500 ║
16
+ ║ > Billing address ║
17
+ ║ ║
18
+ ║ RECENT ║
19
+ ║ xxxxxxxx xxxxxxxxxxxx xxxxx ║
20
+ ║ xxxxxxxx xxxxxxxx xxxxx ║
21
+ ║ ║
22
+ ║ ──────────────────────────────────────────────────────────────────────────── ║
23
+ ║ ║
24
+ ║ ┌────────────────────────────────────────────┐ ║
25
+ ║ │ FREEZE THIS CARD? x │ ║
26
+ ║ ├────────────────────────────────────────────┤ ║
27
+ ║ │ Purchases and withdrawals will be declined │ ║
28
+ ║ │ until you unfreeze it. │ ║
29
+ ║ │ │ ║
30
+ ║ │ [ Cancel ] [[ Freeze ]] │ ║
31
+ ║ └────────────────────────────────────────────┘ ║
32
+ ║ ║
33
+ ║ ┌──────────────────────────┐ ║
34
+ ║ │ (ok) Card frozen x │ ║
35
+ ║ └──────────────────────────┘ ║
36
+ ╚══════════════════════════════════════════════════════════════════════════════╝
@@ -0,0 +1,42 @@
1
+ ╔══════════════════════════════════════════════════════════════════════════════╗
2
+ ║ ║
3
+ ║ ┌──────────────────────────────────────────────────────────────────────────┐ ║
4
+ ║ │ ACME BANK [ Overview ] Send Cards Settings [ + ] Inbox (3) (AN) │ ║
5
+ ║ └──────────────────────────────────────────────────────────────────────────┘ ║
6
+ ║ ║
7
+ ║ ┌──────────────────────────────────────────────────────────────────────────┐ ║
8
+ ║ │ Good morning, Ana Account ****4821 │ ║
9
+ ║ └──────────────────────────────────────────────────────────────────────────┘ ║
10
+ ║ ║
11
+ ║ ┌──────────────────────┐ ┌──────────────────────┐ ┌──────────────────────┐ ║
12
+ ║ │ BALANCE │ │ SPENT THIS MONTH │ │ SAVED │ ║
13
+ ║ │ │ │ │ │ │ ║
14
+ ║ │ $12,480.00 │ │ $2,315.40 │ │ $860.00 │ ║
15
+ ║ │ ^ +2.1% this month │ │ v -3.4% this month │ │ of $1,000 goal │ ║
16
+ ║ │ ▂▃▂▄▅▄▆▇▆█▇█ │ │ [======----] 62% │ │ [=========-] 86% │ ║
17
+ ║ └──────────────────────┘ └──────────────────────┘ └──────────────────────┘ ║
18
+ ║ ║
19
+ ║ ┌───────────────────────────────────┐ ┌───────────────────────────────────┐ ║
20
+ ║ │ RECENT ACTIVITY │ │ SPENDING BY CATEGORY │ ║
21
+ ║ │ │ │ (one █ is $100) │ ║
22
+ ║ │ Today Cafe Nero -$4.50 │ │ Food ██████▍ $640 │ ║
23
+ ║ │ Today Salary (Acme) +$3,200 │ │ Housing ████████████ $1,200 │ ║
24
+ ║ │ Mon Netflix -$15.99 │ │ Travel ███▏ $310 │ ║
25
+ ║ │ Sun Grocer Co -$82.10 │ │ Fun █▋ $165 │ ║
26
+ ║ │ │ │ │ ║
27
+ ║ │ [ See all transactions ] │ │ [ View report ] │ ║
28
+ ║ └───────────────────────────────────┘ └───────────────────────────────────┘ ║
29
+ ║ ║
30
+ ║ ┌──────────────────────────────────────────────────────────────────────────┐ ║
31
+ ║ │ UPCOMING BILLS │ ║
32
+ ║ │ │ ║
33
+ ║ │ Mar 28 Electric $74.00 [ Pay ] │ ║
34
+ ║ │ Mar 30 Mobile $32.00 [ Pay ] │ ║
35
+ ║ │ Apr 01 Rent $1,200.00 [ Pay ] │ ║
36
+ ║ └──────────────────────────────────────────────────────────────────────────┘ ║
37
+ ║ ║
38
+ ║ ┌──────────────────────────────────────────────────────────────────────────┐ ║
39
+ ║ │ (!) 1 transfer needs approval: Jo Kim, $250.00 [[ Review ]] │ ║
40
+ ║ └──────────────────────────────────────────────────────────────────────────┘ ║
41
+ ║ ║
42
+ ╚══════════════════════════════════════════════════════════════════════════════╝
@@ -0,0 +1,31 @@
1
+ ╔═══════════════════════════════════════════════╗
2
+ ║ SEND MONEY Step 1 of 3 ║
3
+ ║ ═════════════════════════════════════════════ ║
4
+ ║ ║
5
+ ║ *---------o---------o ║
6
+ ║ Details Review Done ║
7
+ ║ ║
8
+ ║ To * ║
9
+ ║ [ Jo Kim__________________________ ] ║
10
+ ║ ║
11
+ ║ Amount * ║
12
+ ║ [ $900.00_________________________ ] ║
13
+ ║ (!) Over your $500 daily limit ║
14
+ ║ ║
15
+ ║ Note (optional) ║
16
+ ║ ┌───────────────────────────────────────────┐ ║
17
+ ║ │ Add a note for Jo... │ ║
18
+ ║ │ │ ║
19
+ ║ │ // │ ║
20
+ ║ └───────────────────────────────────────────┘ ║
21
+ ║ ║
22
+ ║ ┌───────────────────────────────────────────┐ ║
23
+ ║ │ (i) Transfers over $200 need approval. │ ║
24
+ ║ └───────────────────────────────────────────┘ ║
25
+ ║ ║
26
+ ║ [ Cancel ] [- Continue -] ║
27
+ ║ ^ ║
28
+ ║ ┌────────────────────────────┐ ║
29
+ ║ │ Fix the amount to continue │ ║
30
+ ║ └────────────────────────────┘ ║
31
+ ╚═══════════════════════════════════════════════╝
@@ -0,0 +1,29 @@
1
+ ╔═══════════════════════════════════════════════╗
2
+ ║ NOTIFICATIONS ║
3
+ ║ ═════════════════════════════════════════════ ║
4
+ ║ ║
5
+ ║ Email alerts [ON ] ║
6
+ ║ Push alerts [OFF] ║
7
+ ║ ║
8
+ ║ Notify me about ║
9
+ ║ [x] Large transactions ║
10
+ ║ [x] Failed payments ║
11
+ ║ [ ] Marketing ║
12
+ ║ ║
13
+ ║ Alert me above ║
14
+ ║ [-----o------] $200 ║
15
+ ║ ║
16
+ ║ v Delivery ║
17
+ ║ (*) Instantly ( ) Daily digest ║
18
+ ║ Quiet hours [ 22:00 v ] to [ 07:00 v ] ║
19
+ ║ > Advanced ║
20
+ ║ ║
21
+ ║ Storage used ║
22
+ ║ [ █████████████▒▒▒▒▒▒▒ ] 65% ║
23
+ ║ ║
24
+ ║ ┌───────────────────────────────────────────┐ ║
25
+ ║ │ (i) Changes apply to all devices. │ ║
26
+ ║ └───────────────────────────────────────────┘ ║
27
+ ║ ║
28
+ ║ [- Reset -] [[ Save ]] ║
29
+ ╚═══════════════════════════════════════════════╝
@@ -0,0 +1,31 @@
1
+ ╔══════════════════════════════════════════════════════════════════════════════╗
2
+ ║ SPENDING REPORT [ Last 30 days v ] ║
3
+ ║ ════════════════════════════════════════════════════════════════════════════ ║
4
+ ║ [ Spending ] Income Savings ║
5
+ ║ ║
6
+ ║ $2,315.40 v -3.4% vs April ║
7
+ ║ ║
8
+ ║ Weekly spend ║
9
+ ║ $450 │ ║
10
+ ║ │ * * ║
11
+ ║ │ * ║
12
+ ║ $225 │ * * * ║
13
+ ║ │ * * * ║
14
+ ║ │ * ║
15
+ ║ $0 │ ║
16
+ ║ └──────────────────────────────────────── ║
17
+ ║ Mar 1 Mar 10 Mar 19 Mar 28 ║
18
+ ║ ║
19
+ ║ Top merchants (one █ is $100) ║
20
+ ║ Rent Co ████████████ $1,200 ║
21
+ ║ Grocer Co ████▏ $410 ║
22
+ ║ Cafe Nero █▊ $180 ║
23
+ ║ Electric Co ▊ $74 ║
24
+ ║ ║
25
+ ║ By category ║
26
+ ║ [FFFFFFHHHHHHHHTTOOOO] ║
27
+ ║ F Food 30% H Housing 40% T Travel 10% O Other 20% ║
28
+ ║ ║
29
+ ║ Budget used ║
30
+ ║ [ ▮▮▮▮▮▮▮▮▮▮▮▮▯▯▯▯▯▯▯▯ ] 62% ║
31
+ ╚══════════════════════════════════════════════════════════════════════════════╝