@1dolinski/fastforms 0.1.2 → 0.3.0
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 +67 -18
- package/SKILL.md +59 -21
- package/bin/fastforms.js +395 -155
- package/lib/fill.js +84 -59
- package/lib/local.js +119 -17
- package/lib/personas.js +100 -23
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,61 +1,89 @@
|
|
|
1
1
|
# fastforms
|
|
2
2
|
|
|
3
|
-
Fill any form fast. Manage personas locally,
|
|
3
|
+
Fill any form fast. Manage multiple personas locally, pick the right ones at fill time.
|
|
4
4
|
|
|
5
5
|
## Quick start
|
|
6
6
|
|
|
7
7
|
```bash
|
|
8
|
-
# 1. Create your
|
|
8
|
+
# 1. Create your first user + business persona
|
|
9
9
|
npx @1dolinski/fastforms init
|
|
10
10
|
|
|
11
|
-
# 2.
|
|
11
|
+
# 2. Add a form persona (org context + form-specific answers)
|
|
12
|
+
npx @1dolinski/fastforms add form
|
|
13
|
+
|
|
14
|
+
# 3. Enable remote debugging in Chrome
|
|
12
15
|
# Open chrome://inspect/#remote-debugging and toggle it on
|
|
13
16
|
|
|
14
|
-
#
|
|
17
|
+
# 4. Fill any form — select which personas to use
|
|
15
18
|
npx @1dolinski/fastforms fill https://example.com/apply
|
|
16
19
|
```
|
|
17
20
|
|
|
18
21
|
## How it works
|
|
19
22
|
|
|
20
23
|
1. **`fastforms init`** walks you through creating user + business personas interactively
|
|
21
|
-
2.
|
|
22
|
-
3.
|
|
23
|
-
4.
|
|
24
|
+
2. **`fastforms add form`** captures the form's org, purpose, and form-specific answers
|
|
25
|
+
3. Personas are saved as individual JSON files in `.fastforms/`
|
|
26
|
+
4. **`fastforms fill <url>`** connects to Chrome, picks personas, fills by label matching
|
|
27
|
+
5. Form personas auto-match by URL — no need to specify which one
|
|
28
|
+
6. **Review and submit manually** in Chrome
|
|
24
29
|
|
|
25
30
|
## Requirements
|
|
26
31
|
|
|
27
32
|
- Chrome >= 144
|
|
28
33
|
- Node.js >= 18
|
|
29
34
|
|
|
35
|
+
## Persona types
|
|
36
|
+
|
|
37
|
+
| Type | What it captures | Example |
|
|
38
|
+
|---|---|---|
|
|
39
|
+
| **User** | Who you are | Name, email, role, GitHub, bio |
|
|
40
|
+
| **Business** | What you're building | Company, product, traction, one-liner |
|
|
41
|
+
| **Form** | Who's asking & why | Org, purpose, form-specific answers |
|
|
42
|
+
|
|
43
|
+
Form persona facts **override** user/business data. "What attracts you to Nitro" belongs on the Nitro form persona, not on your user persona.
|
|
44
|
+
|
|
30
45
|
## Commands
|
|
31
46
|
|
|
32
47
|
| Command | Description |
|
|
33
48
|
|---|---|
|
|
34
|
-
| `fastforms init` | Create
|
|
35
|
-
| `fastforms
|
|
36
|
-
| `fastforms
|
|
49
|
+
| `fastforms init` | Create your first user + business persona |
|
|
50
|
+
| `fastforms add user` | Add another user persona |
|
|
51
|
+
| `fastforms add business` | Add another business persona |
|
|
52
|
+
| `fastforms add form` | Add a form persona (org + answers) |
|
|
53
|
+
| `fastforms list` | Show all saved personas |
|
|
54
|
+
| `fastforms fill <url>` | Fill any form (pick from personas) |
|
|
55
|
+
| `fastforms edit` | Edit an existing persona |
|
|
56
|
+
| `fastforms remove` | Remove a persona |
|
|
37
57
|
| `fastforms personas` | Open web persona manager in Chrome |
|
|
38
58
|
|
|
39
59
|
### Fill options
|
|
40
60
|
|
|
41
61
|
| Option | Description |
|
|
42
62
|
|---|---|
|
|
63
|
+
| `--user <hint>` | Pre-select user persona by name |
|
|
64
|
+
| `--business <hint>` | Pre-select business persona by name |
|
|
65
|
+
| `--form <hint>` | Pre-select form persona by name |
|
|
43
66
|
| `--web` | Use web app personas instead of local files |
|
|
44
67
|
| `--dir <path>` | Custom persona directory path |
|
|
45
68
|
| `--port <port>` | Chrome debug port (auto-detected) |
|
|
46
|
-
| `--user <hint>` | User persona hint (web mode) |
|
|
47
|
-
| `--business <hint>` | Business persona hint (web mode) |
|
|
48
69
|
|
|
49
70
|
## `.fastforms/` directory
|
|
50
71
|
|
|
51
72
|
```
|
|
52
73
|
.fastforms/
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
74
|
+
users/
|
|
75
|
+
chris.json
|
|
76
|
+
work-chris.json
|
|
77
|
+
businesses/
|
|
78
|
+
apinow.json
|
|
79
|
+
sideproject.json
|
|
80
|
+
forms/
|
|
81
|
+
nitro-accelerator.json
|
|
82
|
+
yc-application.json
|
|
83
|
+
defaults.json
|
|
56
84
|
```
|
|
57
85
|
|
|
58
|
-
`
|
|
86
|
+
### User persona (`users/chris.json`)
|
|
59
87
|
|
|
60
88
|
```json
|
|
61
89
|
{
|
|
@@ -74,7 +102,7 @@ npx @1dolinski/fastforms fill https://example.com/apply
|
|
|
74
102
|
}
|
|
75
103
|
```
|
|
76
104
|
|
|
77
|
-
`
|
|
105
|
+
### Business persona (`businesses/apinow.json`)
|
|
78
106
|
|
|
79
107
|
```json
|
|
80
108
|
{
|
|
@@ -86,6 +114,27 @@ npx @1dolinski/fastforms fill https://example.com/apply
|
|
|
86
114
|
}
|
|
87
115
|
```
|
|
88
116
|
|
|
117
|
+
### Form persona (`forms/nitro-accelerator.json`)
|
|
118
|
+
|
|
119
|
+
```json
|
|
120
|
+
{
|
|
121
|
+
"name": "Nitro Accelerator",
|
|
122
|
+
"urls": ["nitroacc.xyz"],
|
|
123
|
+
"organization": "Nitro",
|
|
124
|
+
"purpose": "Crypto accelerator application for early-stage founders",
|
|
125
|
+
"notes": "NYC-based, 1-month residency",
|
|
126
|
+
"deadline": "2026-04-01",
|
|
127
|
+
"facts": {
|
|
128
|
+
"attracts": "The density of high-signal founders and the NYC residency",
|
|
129
|
+
"mentor": "Vitalik — his work on public goods aligns with our mission",
|
|
130
|
+
"spend": "Engineering hires and infrastructure for mainnet launch",
|
|
131
|
+
"last week": "Shipped v2 of the API, onboarded 3 beta customers"
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
The `facts` on a form persona are form-specific answers keyed by label hints. They override user/business data when a form field matches.
|
|
137
|
+
|
|
89
138
|
## Web app (optional)
|
|
90
139
|
|
|
91
140
|
You can also manage personas in the web UI at [293-fastforms.vercel.app/persona](https://293-fastforms.vercel.app/persona) and use `--web` flag to pull from there. The web app has an "Export for CLI" button to download your personas as local JSON files.
|
|
@@ -104,7 +153,7 @@ node bin/fastforms.js fill https://example.com/apply
|
|
|
104
153
|
|
|
105
154
|
### Adding a new form mapping
|
|
106
155
|
|
|
107
|
-
1. Add a `buildXxxData(user, biz)` function in `lib/fill.js`
|
|
156
|
+
1. Add a `buildXxxData(user, biz, form)` function in `lib/fill.js`
|
|
108
157
|
2. Add a URL check in `fillForm()`
|
|
109
158
|
3. Test with `node bin/fastforms.js fill <url>`
|
|
110
159
|
|
package/SKILL.md
CHANGED
|
@@ -11,25 +11,33 @@ Use this skill when the user says any of:
|
|
|
11
11
|
- "fill this form with my persona"
|
|
12
12
|
- "use fastforms", "fastforms fill"
|
|
13
13
|
- "set up my personas", "init fastforms"
|
|
14
|
+
- "add a persona", "add a form persona"
|
|
14
15
|
|
|
15
16
|
## What it does
|
|
16
17
|
|
|
17
18
|
`fastforms` is a CLI tool that:
|
|
18
19
|
|
|
19
|
-
1. Manages personas locally in
|
|
20
|
+
1. Manages three types of personas locally in `.fastforms/`:
|
|
21
|
+
- **User** — who you are (name, email, bio, skills)
|
|
22
|
+
- **Business** — what you're building (company, product, traction)
|
|
23
|
+
- **Form** — who's asking and why (org, purpose, form-specific answers)
|
|
20
24
|
2. Connects to Chrome via the DevTools Protocol
|
|
21
|
-
3.
|
|
25
|
+
3. Lets you pick which user + business + form persona to use at fill time
|
|
26
|
+
4. Fills any form using label-matching — never submits
|
|
22
27
|
|
|
23
28
|
## Quick start
|
|
24
29
|
|
|
25
30
|
```bash
|
|
26
|
-
# 1. Create your
|
|
31
|
+
# 1. Create your first user + business persona
|
|
27
32
|
npx @1dolinski/fastforms init
|
|
28
33
|
|
|
29
|
-
# 2.
|
|
34
|
+
# 2. Add a form persona with org context and form-specific answers
|
|
35
|
+
npx @1dolinski/fastforms add form
|
|
36
|
+
|
|
37
|
+
# 3. Enable remote debugging in Chrome
|
|
30
38
|
# Open chrome://inspect/#remote-debugging
|
|
31
39
|
|
|
32
|
-
#
|
|
40
|
+
# 4. Fill any form — pick from your personas
|
|
33
41
|
npx @1dolinski/fastforms fill https://example.com/apply
|
|
34
42
|
```
|
|
35
43
|
|
|
@@ -37,43 +45,73 @@ npx @1dolinski/fastforms fill https://example.com/apply
|
|
|
37
45
|
|
|
38
46
|
### `npx @1dolinski/fastforms init`
|
|
39
47
|
|
|
40
|
-
|
|
48
|
+
Walks through creating a user + business persona (optionally a form persona too).
|
|
49
|
+
|
|
50
|
+
### `npx @1dolinski/fastforms add user|business|form`
|
|
51
|
+
|
|
52
|
+
Add another persona of any type.
|
|
53
|
+
|
|
54
|
+
### `npx @1dolinski/fastforms list`
|
|
55
|
+
|
|
56
|
+
Show all saved personas across all types.
|
|
41
57
|
|
|
42
58
|
### `npx @1dolinski/fastforms fill <url>`
|
|
43
59
|
|
|
44
|
-
Fills any form.
|
|
60
|
+
Fills any form. If you have multiple personas, prompts you to pick. Form personas auto-match by URL.
|
|
45
61
|
|
|
46
62
|
Options:
|
|
63
|
+
- `--user <hint>` — pre-select a user persona by name
|
|
64
|
+
- `--business <hint>` — pre-select a business persona by name
|
|
65
|
+
- `--form <hint>` — pre-select a form persona by name
|
|
47
66
|
- `--web` — use web app personas (https://293-fastforms.vercel.app) instead of local files
|
|
48
67
|
- `--dir <path>` — custom path to persona directory
|
|
49
68
|
- `--port <port>` — Chrome debug port (auto-detected by default)
|
|
50
69
|
|
|
51
70
|
### `npx @1dolinski/fastforms edit`
|
|
52
71
|
|
|
53
|
-
|
|
72
|
+
Pick any persona to edit interactively.
|
|
73
|
+
|
|
74
|
+
### `npx @1dolinski/fastforms remove`
|
|
54
75
|
|
|
55
|
-
|
|
76
|
+
Pick any persona to delete.
|
|
56
77
|
|
|
57
|
-
|
|
78
|
+
## Persona types
|
|
58
79
|
|
|
59
|
-
|
|
80
|
+
### User persona
|
|
81
|
+
Who you are. Name, email, role, GitHub, LinkedIn, bio, custom facts.
|
|
60
82
|
|
|
61
|
-
|
|
62
|
-
|
|
83
|
+
### Business persona
|
|
84
|
+
What you're building. Company, product, one-liner, traction, business model.
|
|
85
|
+
|
|
86
|
+
### Form persona
|
|
87
|
+
Who's asking and why. The organization that owns the form, the form's purpose, and **form-specific answers** that override user/business data. For example, "what attracts you to Nitro" is a Nitro-specific answer — it belongs on the form persona, not on your user or business persona.
|
|
88
|
+
|
|
89
|
+
Form personas auto-match by URL. If your form persona has `urls: ["nitroacc.xyz"]` and you fill `https://nitroacc.xyz/apply`, it auto-selects.
|
|
63
90
|
|
|
64
91
|
## How it works
|
|
65
92
|
|
|
66
|
-
1. Reads personas from `.fastforms/
|
|
67
|
-
2.
|
|
68
|
-
3.
|
|
69
|
-
4.
|
|
70
|
-
5.
|
|
93
|
+
1. Reads all personas from `.fastforms/users/`, `.fastforms/businesses/`, and `.fastforms/forms/`
|
|
94
|
+
2. If multiple, prompts you to pick which user + business persona to use
|
|
95
|
+
3. Auto-matches form persona by URL (or prompts if multiple)
|
|
96
|
+
4. Auto-discovers Chrome's debug port from `DevToolsActivePort`
|
|
97
|
+
5. Opens (or reuses) the target form URL tab
|
|
98
|
+
6. Fills using label-matching. Form persona facts are checked first as overrides.
|
|
99
|
+
7. Shows what was filled, what was skipped. **Never submits.**
|
|
71
100
|
|
|
72
101
|
## Agent instructions
|
|
73
102
|
|
|
74
103
|
When the user asks you to fill a form:
|
|
75
104
|
|
|
76
105
|
1. Check if `.fastforms/` exists. If not, run `npx @1dolinski/fastforms init`
|
|
77
|
-
2.
|
|
78
|
-
3.
|
|
79
|
-
4.
|
|
106
|
+
2. If the form is new, suggest `npx @1dolinski/fastforms add form` to capture form-specific context
|
|
107
|
+
3. Run `npx @1dolinski/fastforms fill <the-url>`
|
|
108
|
+
4. If Chrome debugging isn't enabled, tell the user to open `chrome://inspect/#remote-debugging`
|
|
109
|
+
5. After filling, tell the user to review in Chrome and submit manually
|
|
110
|
+
|
|
111
|
+
When the user wants to add a persona:
|
|
112
|
+
|
|
113
|
+
1. Run `npx @1dolinski/fastforms add user|business|form`
|
|
114
|
+
|
|
115
|
+
When the user wants to see their personas:
|
|
116
|
+
|
|
117
|
+
1. Run `npx @1dolinski/fastforms list`
|