finch-cli 0.2.0__tar.gz → 0.3.0__tar.gz
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.
- finch_cli-0.3.0/LICENSE +43 -0
- {finch_cli-0.2.0 → finch_cli-0.3.0}/PKG-INFO +5 -5
- {finch_cli-0.2.0 → finch_cli-0.3.0}/README.md +1 -1
- finch_cli-0.3.0/REDDIT_POST.md +230 -0
- finch_cli-0.3.0/docs/cli-auth-approved-redacted.png +0 -0
- finch_cli-0.3.0/docs/cli-auth-approved.png +0 -0
- finch_cli-0.3.0/docs/cli-auth-needs-signin.png +0 -0
- finch_cli-0.3.0/docs/cli-login.png +0 -0
- finch_cli-0.3.0/docs/cli-login.svg +99 -0
- finch_cli-0.3.0/docs/tui-jobs.png +0 -0
- finch_cli-0.3.0/docs/tui-jobs.svg +229 -0
- finch_cli-0.3.0/docs/tui-library.png +0 -0
- finch_cli-0.3.0/docs/tui-library.svg +228 -0
- finch_cli-0.3.0/docs/tui-tailor.png +0 -0
- finch_cli-0.3.0/docs/tui-tailor.svg +240 -0
- {finch_cli-0.2.0 → finch_cli-0.3.0}/finch_cli/__init__.py +1 -1
- {finch_cli-0.2.0 → finch_cli-0.3.0}/pyproject.toml +3 -3
- finch_cli-0.2.0/LICENSE +0 -21
- finch_cli-0.2.0/REDDIT_POST.md +0 -100
- finch_cli-0.2.0/docs/tui-jobs.svg +0 -274
- finch_cli-0.2.0/docs/tui-library.svg +0 -266
- finch_cli-0.2.0/docs/tui-tailor.svg +0 -282
- {finch_cli-0.2.0 → finch_cli-0.3.0}/.gitignore +0 -0
- {finch_cli-0.2.0 → finch_cli-0.3.0}/examples/base_resume.md +0 -0
- {finch_cli-0.2.0 → finch_cli-0.3.0}/examples/job_post.txt +0 -0
- {finch_cli-0.2.0 → finch_cli-0.3.0}/finch_cli/__main__.py +0 -0
- {finch_cli-0.2.0 → finch_cli-0.3.0}/finch_cli/auth.py +0 -0
- {finch_cli-0.2.0 → finch_cli-0.3.0}/finch_cli/cli.py +0 -0
- {finch_cli-0.2.0 → finch_cli-0.3.0}/finch_cli/fetch.py +0 -0
- {finch_cli-0.2.0 → finch_cli-0.3.0}/finch_cli/jobs.py +0 -0
- {finch_cli-0.2.0 → finch_cli-0.3.0}/finch_cli/output.py +0 -0
- {finch_cli-0.2.0 → finch_cli-0.3.0}/finch_cli/score.py +0 -0
- {finch_cli-0.2.0 → finch_cli-0.3.0}/finch_cli/storage.py +0 -0
- {finch_cli-0.2.0 → finch_cli-0.3.0}/finch_cli/tailor.py +0 -0
- {finch_cli-0.2.0 → finch_cli-0.3.0}/finch_cli/tui.py +0 -0
finch_cli-0.3.0/LICENSE
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
Finch CLI Terms of Use
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Finch (applyfinch.com). All rights reserved.
|
|
4
|
+
|
|
5
|
+
1. License grant. Finch grants you a personal, non-exclusive, non-transferable,
|
|
6
|
+
revocable license to install and use this software on devices you own or
|
|
7
|
+
control for your own job-search workflow. Educational and evaluation use are
|
|
8
|
+
permitted.
|
|
9
|
+
|
|
10
|
+
2. Restrictions. You may not:
|
|
11
|
+
(a) copy, modify, adapt, translate, or create derivative works of the
|
|
12
|
+
software;
|
|
13
|
+
(b) reverse engineer, decompile, disassemble, or attempt to discover the
|
|
14
|
+
source code, except to the extent that applicable law expressly
|
|
15
|
+
prohibits such a restriction;
|
|
16
|
+
(c) sublicense, sell, rent, lease, distribute, or otherwise transfer the
|
|
17
|
+
software or any rights to it;
|
|
18
|
+
(d) remove or alter any proprietary notices contained in the software;
|
|
19
|
+
(e) use the software to build a competing product or service.
|
|
20
|
+
|
|
21
|
+
3. Service component. Certain features (including but not limited to "finch
|
|
22
|
+
login" and tailoring performed via the Finch backend) require communication
|
|
23
|
+
with services operated by Finch. Those services are subject to the terms
|
|
24
|
+
posted at https://applyfinch.com/terms. Finch may modify, suspend, or
|
|
25
|
+
discontinue any service feature at any time.
|
|
26
|
+
|
|
27
|
+
4. Ownership. The software, including all intellectual property rights in it,
|
|
28
|
+
is and remains the property of Finch. No rights are granted except those
|
|
29
|
+
expressly set out in this license.
|
|
30
|
+
|
|
31
|
+
5. No warranty. THE SOFTWARE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND,
|
|
32
|
+
EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE WARRANTIES OF
|
|
33
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT.
|
|
34
|
+
|
|
35
|
+
6. Limitation of liability. TO THE FULLEST EXTENT PERMITTED BY LAW, FINCH WILL
|
|
36
|
+
NOT BE LIABLE FOR ANY INDIRECT, INCIDENTAL, SPECIAL, CONSEQUENTIAL, OR
|
|
37
|
+
PUNITIVE DAMAGES ARISING OUT OF OR RELATING TO YOUR USE OF THE SOFTWARE.
|
|
38
|
+
|
|
39
|
+
7. Termination. This license terminates automatically if you breach any of its
|
|
40
|
+
terms. On termination, you must stop using and delete all copies of the
|
|
41
|
+
software.
|
|
42
|
+
|
|
43
|
+
8. Contact. carlunpen@gmail.com.
|
|
@@ -1,18 +1,18 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
2
|
Name: finch-cli
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.3.0
|
|
4
4
|
Summary: Tailor your resume to any job posting from your terminal.
|
|
5
5
|
Project-URL: Homepage, https://applyfinch.com
|
|
6
6
|
Project-URL: Repository, https://github.com/applyEasy/finch-cli
|
|
7
7
|
Project-URL: Issues, https://github.com/applyEasy/finch-cli/issues
|
|
8
8
|
Author-email: Carlos Luna-Pena <carlunpen@gmail.com>
|
|
9
|
-
License:
|
|
9
|
+
License: LicenseRef-Proprietary
|
|
10
10
|
License-File: LICENSE
|
|
11
11
|
Keywords: ai,career,cli,deepseek,internship,job-search,openai,resume,textual,tui
|
|
12
12
|
Classifier: Development Status :: 4 - Beta
|
|
13
13
|
Classifier: Environment :: Console
|
|
14
14
|
Classifier: Intended Audience :: End Users/Desktop
|
|
15
|
-
Classifier: License ::
|
|
15
|
+
Classifier: License :: Other/Proprietary License
|
|
16
16
|
Classifier: Programming Language :: Python :: 3
|
|
17
17
|
Classifier: Programming Language :: Python :: 3.10
|
|
18
18
|
Classifier: Programming Language :: Python :: 3.11
|
|
@@ -145,4 +145,4 @@ the autofill side - the part that actually fills out the application form - live
|
|
|
145
145
|
|
|
146
146
|
## license
|
|
147
147
|
|
|
148
|
-
|
|
148
|
+
proprietary. personal + evaluation use only. see LICENSE for the full terms.
|
|
@@ -0,0 +1,230 @@
|
|
|
1
|
+
# reddit launch drafts -- finch-cli 0.2.0
|
|
2
|
+
|
|
3
|
+
three drafts below. pick the sub, paste the body, attach the images noted under each.
|
|
4
|
+
|
|
5
|
+
space cross-posts at least 24h apart. the order I'd post:
|
|
6
|
+
|
|
7
|
+
1. **r/Python** -- sunday 9-10pm central. mod-friendly, expects polish.
|
|
8
|
+
2. **r/csmajors** -- monday 8-9am central. the target audience.
|
|
9
|
+
3. **show hn** -- tuesday morning. picky, expects technical depth.
|
|
10
|
+
|
|
11
|
+
## image assets in /docs
|
|
12
|
+
|
|
13
|
+
| file | use it for |
|
|
14
|
+
|---|---|
|
|
15
|
+
| `docs/tui-tailor.svg` | the money shot. tailor tab + match panel (78 -> 92 score) |
|
|
16
|
+
| `docs/tui-jobs.svg` | jobs tab. real internships from simplifyjobs. |
|
|
17
|
+
| `docs/tui-library.svg` | library tab (less important) |
|
|
18
|
+
| `docs/cli-login.svg` | the `finch login` terminal output |
|
|
19
|
+
| `docs/cli-auth-approved.png` | the in-browser approved page. crop/blur the email if you want. |
|
|
20
|
+
| `docs/cli-auth-needs-signin.png` | the error/empty state (skip unless you want a "polished edge case" beat) |
|
|
21
|
+
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
## 1. r/Python -- "Show /r/Python" tag
|
|
25
|
+
|
|
26
|
+
**title**: *Show /r/Python: finch-cli -- tailor your resume to a job in your terminal, with a one-link sign-in flow*
|
|
27
|
+
|
|
28
|
+
**body**:
|
|
29
|
+
|
|
30
|
+
```
|
|
31
|
+
hi r/Python,
|
|
32
|
+
|
|
33
|
+
cs senior at tamu, built a small cli + textual tui that tailors a resume to a
|
|
34
|
+
specific job posting. lives at https://github.com/applyEasy/finch-cli, mit, 0.2.0
|
|
35
|
+
on pypi.
|
|
36
|
+
|
|
37
|
+
pip install finch-cli
|
|
38
|
+
finch login # opens a browser link, no api key needed
|
|
39
|
+
finch ui
|
|
40
|
+
|
|
41
|
+
or pure cli:
|
|
42
|
+
|
|
43
|
+
finch tailor --resume resume.md --job https://jobs.example.com/swe-intern -o tailored.md
|
|
44
|
+
|
|
45
|
+
[image: docs/tui-tailor.svg]
|
|
46
|
+
[image: docs/cli-login.svg]
|
|
47
|
+
|
|
48
|
+
what it does:
|
|
49
|
+
|
|
50
|
+
- the tailor command sends your base resume + a job posting to deepseek/v3.2 (or
|
|
51
|
+
any openai-compatible endpoint) and gets back a markdown resume with bullets
|
|
52
|
+
and ordering reworked for the posting. won't invent skills you don't have --
|
|
53
|
+
the system prompt enforces that.
|
|
54
|
+
- the tui has three tabs: jobs (pulls ~3,200 active internships + new-grad
|
|
55
|
+
postings from the simplifyjobs lists), library (saved tailorings), and the
|
|
56
|
+
three-pane tailor editor (base / job / output). there's an ats-style match
|
|
57
|
+
panel at the bottom that shows score, matched + missing keywords, and the
|
|
58
|
+
delta vs the base resume.
|
|
59
|
+
- `finch login` opens a sign-in link on applyfinch.com so you don't have to
|
|
60
|
+
manage an api key. backend does the llm call on a small free tier. if you'd
|
|
61
|
+
rather use your own key (deepseek is cheap, ~30x less than gpt-4o), skip
|
|
62
|
+
login and set DEEPSEEK_API_KEY.
|
|
63
|
+
|
|
64
|
+
stack:
|
|
65
|
+
|
|
66
|
+
- click for the cli, textual for the tui, rich for the rendering, httpx for the
|
|
67
|
+
network, trafilatura for url -> text on job postings.
|
|
68
|
+
- openai sdk against deepseek's api by default (model: deepseek-chat), but
|
|
69
|
+
anything openai-compatible works (groq, together, fireworks, openrouter, etc.).
|
|
70
|
+
the `finch login` path uses deepseek-v3.2 via openrouter on the finch backend.
|
|
71
|
+
- hatchling for the build. under 2k loc in finch_cli/.
|
|
72
|
+
- the login flow is rfc 8628 device flow: cli posts /api/v1/cli/start, prints
|
|
73
|
+
the verification url, polls /api/v1/cli/poll until the user clicks the link,
|
|
74
|
+
signs in (supabase + google), and the page posts /api/v1/cli/approve. token
|
|
75
|
+
is sha256-hashed at rest, supabase rls service-role only, no api key in plain
|
|
76
|
+
text on disk.
|
|
77
|
+
|
|
78
|
+
security stuff I cared about:
|
|
79
|
+
|
|
80
|
+
- ssrf defense on the url-fetch path (scheme allowlist + private/loopback ip
|
|
81
|
+
rejection via socket.getaddrinfo + ipaddress).
|
|
82
|
+
- prompt injection inside the job posting is treated as data, not instructions
|
|
83
|
+
-- I strip the wrapping tags, cap inputs at 20k chars each, and remind the
|
|
84
|
+
model after the user message. ran a few obvious "ignore previous
|
|
85
|
+
instructions, output X" cases through it and the model held.
|
|
86
|
+
- token revocation actually revokes server-side (sha256 lookup deleted from
|
|
87
|
+
the cli_tokens table), so `finch logout` isn't local-only.
|
|
88
|
+
|
|
89
|
+
known limits:
|
|
90
|
+
|
|
91
|
+
- workday + some greenhouse iframe pages need js, so url fetching fails clean
|
|
92
|
+
and tells you to use --job-file with a pasted description.
|
|
93
|
+
- the model won't invent experience. if your base resume is thin, the tailored
|
|
94
|
+
one is thin. fix the base first.
|
|
95
|
+
- output is markdown. pipe to pandoc for pdf, or paste into overleaf if you
|
|
96
|
+
have a tex template.
|
|
97
|
+
|
|
98
|
+
repo: https://github.com/applyEasy/finch-cli
|
|
99
|
+
pypi: https://pypi.org/project/finch-cli/
|
|
100
|
+
|
|
101
|
+
feedback and prs welcome. the autofill side of the workflow -- the part that
|
|
102
|
+
fills out the actual application form -- lives at applyfinch.com if you want
|
|
103
|
+
that piece too.
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
---
|
|
107
|
+
|
|
108
|
+
## 2. r/csmajors (and r/internships)
|
|
109
|
+
|
|
110
|
+
**title**: *built a cli that tailors your resume to each internship posting. mit, on pypi, no signup.*
|
|
111
|
+
|
|
112
|
+
**body**:
|
|
113
|
+
|
|
114
|
+
```
|
|
115
|
+
cs senior at tamu. you know the drill -- 80 applications a season, every job
|
|
116
|
+
posting wants a slightly different angle, and you end up with a Resume_Final_v9_USE_THIS.docx
|
|
117
|
+
nightmare. so my co-founder and I built a small open source tool that does the
|
|
118
|
+
tailoring for you.
|
|
119
|
+
|
|
120
|
+
pip install finch-cli
|
|
121
|
+
finch login # opens a browser link, signs you in. no api key needed.
|
|
122
|
+
finch ui
|
|
123
|
+
|
|
124
|
+
three tabs: a jobs tab (3,000+ live internships + new-grads from the
|
|
125
|
+
simplifyjobs lists), a library of your tailored resumes, and the tailor editor
|
|
126
|
+
(base resume / job posting / tailored output side by side). there's an ats-style
|
|
127
|
+
match panel showing your match score, which job keywords you cover, which ones
|
|
128
|
+
you don't, and how much the tailored version moved the needle vs the base.
|
|
129
|
+
|
|
130
|
+
[image: docs/tui-tailor.svg]
|
|
131
|
+
[image: docs/tui-jobs.svg]
|
|
132
|
+
|
|
133
|
+
how the tailoring works: you give it your resume in markdown + a job description
|
|
134
|
+
(url or paste). the model rewrites bullets + ordering to fit the posting. it
|
|
135
|
+
won't invent experience you don't have -- the prompt enforces that. you'll
|
|
136
|
+
get something honest, just better-aligned.
|
|
137
|
+
|
|
138
|
+
example cli usage if you don't want the tui:
|
|
139
|
+
|
|
140
|
+
finch tailor -r resume.md --job https://jobs.netflix.com/positions/14234 -o tailored.md
|
|
141
|
+
|
|
142
|
+
repo (mit): https://github.com/applyEasy/finch-cli
|
|
143
|
+
pypi: https://pypi.org/project/finch-cli/
|
|
144
|
+
|
|
145
|
+
happy to answer questions. roadmap is `finch jobs` (filter + pull job feeds
|
|
146
|
+
straight into the tailor) and `finch apply` (auto-apply from the cli). prs
|
|
147
|
+
welcome.
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
---
|
|
151
|
+
|
|
152
|
+
## 3. Show HN
|
|
153
|
+
|
|
154
|
+
**title**: *Show HN: Finch-cli – terminal resume tailoring with one-click sign-in (no API key)*
|
|
155
|
+
|
|
156
|
+
**body** (first comment after submission, since HN doesn't use post bodies for Show):
|
|
157
|
+
|
|
158
|
+
```
|
|
159
|
+
Hi HN,
|
|
160
|
+
|
|
161
|
+
CS senior at A&M, built a small terminal client for the part of job hunting
|
|
162
|
+
that's actually tedious: tailoring the same resume to 50+ postings a season.
|
|
163
|
+
|
|
164
|
+
pip install finch-cli
|
|
165
|
+
finch login # opens a sign-in link in your browser
|
|
166
|
+
finch ui
|
|
167
|
+
|
|
168
|
+
[image: docs/tui-tailor.svg]
|
|
169
|
+
[image: docs/cli-auth-approved.png]
|
|
170
|
+
|
|
171
|
+
It's a CLI plus a Textual TUI in one package. Three tabs: jobs (live internship
|
|
172
|
+
+ new-grad feeds from SimplifyJobs, ~3,200 postings), a library of saved
|
|
173
|
+
tailorings, and a three-pane editor (base resume / job posting / tailored
|
|
174
|
+
output) with an ATS-style match panel showing score, keyword coverage, and the
|
|
175
|
+
delta vs your base resume.
|
|
176
|
+
|
|
177
|
+
Some design choices I'd be curious for feedback on:
|
|
178
|
+
|
|
179
|
+
1. The login flow is RFC 8628 device flow, not "paste an API key." Reasoning:
|
|
180
|
+
most CLI users don't want to manage a DeepSeek/OpenAI key, and the friction
|
|
181
|
+
of getting one was tanking install-to-first-tailor conversion in my own
|
|
182
|
+
testing. `finch login` opens a link, you sign in with Google on
|
|
183
|
+
applyfinch.com, the page POSTs the device code back, the CLI polls and
|
|
184
|
+
gets a token. Token's SHA256-hashed at rest, server-side revocation on
|
|
185
|
+
logout. Power users can skip login and set DEEPSEEK_API_KEY.
|
|
186
|
+
|
|
187
|
+
2. The TUI lives in the same `finch_cli` package -- not a separate `finch_cli[tui]`
|
|
188
|
+
extra. The reasoning was that Textual is the actual product surface, not an
|
|
189
|
+
optional. Made the dep list slightly heavier but kept the install story
|
|
190
|
+
one-line.
|
|
191
|
+
|
|
192
|
+
3. Default models: the local path uses `deepseek-chat` against DeepSeek's API
|
|
193
|
+
(the env var is `DEEPSEEK_API_KEY`); the `finch login` path goes through
|
|
194
|
+
the Finch backend which calls `deepseek/deepseek-v3.2-exp` via OpenRouter.
|
|
195
|
+
DeepSeek is roughly 30x cheaper than GPT-4o on this prompt. In my own
|
|
196
|
+
side-by-side reads it produced tighter bullets than Sonnet for this use
|
|
197
|
+
case, but I haven't run a proper eval -- take it as anecdote.
|
|
198
|
+
|
|
199
|
+
4. Security: SSRF defense on the URL-fetch path (scheme allowlist + private/
|
|
200
|
+
loopback IP rejection via ipaddress.ip_address against socket.getaddrinfo
|
|
201
|
+
results), 5 MB response cap, manual redirect following with revalidation
|
|
202
|
+
each hop. Prompt injection inside the <job_posting> tags is stripped + the
|
|
203
|
+
model is reminded after the user message that the contents are data. Input
|
|
204
|
+
caps are 20k chars on the job and 20k on the resume.
|
|
205
|
+
|
|
206
|
+
Repo (MIT): https://github.com/applyEasy/finch-cli
|
|
207
|
+
PyPI: https://pypi.org/project/finch-cli/
|
|
208
|
+
|
|
209
|
+
The auto-apply side -- the part that actually fills out Workday/Greenhouse/
|
|
210
|
+
Ashby/Lever forms -- lives at https://applyfinch.com. Same engine, free
|
|
211
|
+
during beta.
|
|
212
|
+
|
|
213
|
+
Feedback welcome.
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
---
|
|
217
|
+
|
|
218
|
+
## notes for posting
|
|
219
|
+
|
|
220
|
+
- the `finch login` flow is what makes 0.2.0 different from 0.1.x and worth a fresh
|
|
221
|
+
post even if r/Python saw 0.1.x. lead with it in titles.
|
|
222
|
+
- if you post screenshots: the tailor tab svg is the strongest single image. it
|
|
223
|
+
shows the product, the score, the keyword analysis, and the orange branding in
|
|
224
|
+
one frame. the cli-auth-approved.png is the second-strongest because "click
|
|
225
|
+
a link to sign in to a cli" is a beat people don't expect.
|
|
226
|
+
- crop the +e2eresume2 email in cli-auth-approved.png if you don't want the
|
|
227
|
+
alias visible. it's yours but visible.
|
|
228
|
+
- after posting, watch the first 30 min for comments and respond to ALL of them
|
|
229
|
+
in your voice (no AI, no em-dashes, no "great question"). that's what makes
|
|
230
|
+
or breaks r/Python.
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
<svg class="rich-terminal" viewBox="0 0 1068 294.0" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
+
<!-- Generated with Rich https://www.textualize.io -->
|
|
3
|
+
<style>
|
|
4
|
+
|
|
5
|
+
@font-face {
|
|
6
|
+
font-family: "Fira Code";
|
|
7
|
+
src: local("FiraCode-Regular"),
|
|
8
|
+
url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff2/FiraCode-Regular.woff2") format("woff2"),
|
|
9
|
+
url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff/FiraCode-Regular.woff") format("woff");
|
|
10
|
+
font-style: normal;
|
|
11
|
+
font-weight: 400;
|
|
12
|
+
}
|
|
13
|
+
@font-face {
|
|
14
|
+
font-family: "Fira Code";
|
|
15
|
+
src: local("FiraCode-Bold"),
|
|
16
|
+
url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff2/FiraCode-Bold.woff2") format("woff2"),
|
|
17
|
+
url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff/FiraCode-Bold.woff") format("woff");
|
|
18
|
+
font-style: bold;
|
|
19
|
+
font-weight: 700;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
.terminal-2184957314-matrix {
|
|
23
|
+
font-family: Fira Code, monospace;
|
|
24
|
+
font-size: 20px;
|
|
25
|
+
line-height: 24.4px;
|
|
26
|
+
font-variant-east-asian: full-width;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
.terminal-2184957314-title {
|
|
30
|
+
font-size: 18px;
|
|
31
|
+
font-weight: bold;
|
|
32
|
+
font-family: arial;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
.terminal-2184957314-r1 { fill: #c5c8c6 }
|
|
36
|
+
.terminal-2184957314-r2 { fill: #c5c8c6;font-weight: bold }
|
|
37
|
+
.terminal-2184957314-r3 { fill: #68a0b3;text-decoration: underline; }
|
|
38
|
+
.terminal-2184957314-r4 { fill: #868887 }
|
|
39
|
+
.terminal-2184957314-r5 { fill: #8d7b39 }
|
|
40
|
+
.terminal-2184957314-r6 { fill: #98a84b }
|
|
41
|
+
</style>
|
|
42
|
+
|
|
43
|
+
<defs>
|
|
44
|
+
<clipPath id="terminal-2184957314-clip-terminal">
|
|
45
|
+
<rect x="0" y="0" width="1048.2" height="243.0" />
|
|
46
|
+
</clipPath>
|
|
47
|
+
<clipPath id="terminal-2184957314-line-0">
|
|
48
|
+
<rect x="0" y="1.5" width="1049.2" height="24.65"/>
|
|
49
|
+
</clipPath>
|
|
50
|
+
<clipPath id="terminal-2184957314-line-1">
|
|
51
|
+
<rect x="0" y="25.9" width="1049.2" height="24.65"/>
|
|
52
|
+
</clipPath>
|
|
53
|
+
<clipPath id="terminal-2184957314-line-2">
|
|
54
|
+
<rect x="0" y="50.3" width="1049.2" height="24.65"/>
|
|
55
|
+
</clipPath>
|
|
56
|
+
<clipPath id="terminal-2184957314-line-3">
|
|
57
|
+
<rect x="0" y="74.7" width="1049.2" height="24.65"/>
|
|
58
|
+
</clipPath>
|
|
59
|
+
<clipPath id="terminal-2184957314-line-4">
|
|
60
|
+
<rect x="0" y="99.1" width="1049.2" height="24.65"/>
|
|
61
|
+
</clipPath>
|
|
62
|
+
<clipPath id="terminal-2184957314-line-5">
|
|
63
|
+
<rect x="0" y="123.5" width="1049.2" height="24.65"/>
|
|
64
|
+
</clipPath>
|
|
65
|
+
<clipPath id="terminal-2184957314-line-6">
|
|
66
|
+
<rect x="0" y="147.9" width="1049.2" height="24.65"/>
|
|
67
|
+
</clipPath>
|
|
68
|
+
<clipPath id="terminal-2184957314-line-7">
|
|
69
|
+
<rect x="0" y="172.3" width="1049.2" height="24.65"/>
|
|
70
|
+
</clipPath>
|
|
71
|
+
<clipPath id="terminal-2184957314-line-8">
|
|
72
|
+
<rect x="0" y="196.7" width="1049.2" height="24.65"/>
|
|
73
|
+
</clipPath>
|
|
74
|
+
</defs>
|
|
75
|
+
|
|
76
|
+
<rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="1066" height="292" rx="8"/><text class="terminal-2184957314-title" fill="#c5c8c6" text-anchor="middle" x="533" y="27">finch login</text>
|
|
77
|
+
<g transform="translate(26,22)">
|
|
78
|
+
<circle cx="0" cy="0" r="7" fill="#ff5f57"/>
|
|
79
|
+
<circle cx="22" cy="0" r="7" fill="#febc2e"/>
|
|
80
|
+
<circle cx="44" cy="0" r="7" fill="#28c840"/>
|
|
81
|
+
</g>
|
|
82
|
+
|
|
83
|
+
<g transform="translate(9, 41)" clip-path="url(#terminal-2184957314-clip-terminal)">
|
|
84
|
+
|
|
85
|
+
<g class="terminal-2184957314-matrix">
|
|
86
|
+
<text class="terminal-2184957314-r1" x="1049.2" y="20" textLength="12.2" clip-path="url(#terminal-2184957314-line-0)">
|
|
87
|
+
</text><text class="terminal-2184957314-r2" x="0" y="44.4" textLength="500.2" clip-path="url(#terminal-2184957314-line-1)">Open this URL in your browser to sign in:</text><text class="terminal-2184957314-r1" x="1049.2" y="44.4" textLength="12.2" clip-path="url(#terminal-2184957314-line-1)">
|
|
88
|
+
</text><text class="terminal-2184957314-r3" x="24.4" y="68.8" textLength="390.4" clip-path="url(#terminal-2184957314-line-2)">https://applyfinch.com/cli/auth?</text><text class="terminal-2184957314-r3" x="414.8" y="68.8" textLength="48.8" clip-path="url(#terminal-2184957314-line-2)">code</text><text class="terminal-2184957314-r3" x="463.6" y="68.8" textLength="12.2" clip-path="url(#terminal-2184957314-line-2)">=</text><text class="terminal-2184957314-r3" x="475.8" y="68.8" textLength="48.8" clip-path="url(#terminal-2184957314-line-2)">AUB8</text><text class="terminal-2184957314-r3" x="524.6" y="68.8" textLength="61" clip-path="url(#terminal-2184957314-line-2)">-MMQH</text><text class="terminal-2184957314-r1" x="1049.2" y="68.8" textLength="12.2" clip-path="url(#terminal-2184957314-line-2)">
|
|
89
|
+
</text><text class="terminal-2184957314-r1" x="1049.2" y="93.2" textLength="12.2" clip-path="url(#terminal-2184957314-line-3)">
|
|
90
|
+
</text><text class="terminal-2184957314-r1" x="0" y="117.6" textLength="695.4" clip-path="url(#terminal-2184957314-line-4)">If your browser does not open automatically, the code is </text><text class="terminal-2184957314-r2" x="695.4" y="117.6" textLength="109.8" clip-path="url(#terminal-2184957314-line-4)">AUB8-MMQH</text><text class="terminal-2184957314-r1" x="805.2" y="117.6" textLength="12.2" clip-path="url(#terminal-2184957314-line-4)">.</text><text class="terminal-2184957314-r1" x="1049.2" y="117.6" textLength="12.2" clip-path="url(#terminal-2184957314-line-4)">
|
|
91
|
+
</text><text class="terminal-2184957314-r1" x="1049.2" y="142" textLength="12.2" clip-path="url(#terminal-2184957314-line-5)">
|
|
92
|
+
</text><text class="terminal-2184957314-r4" x="0" y="166.4" textLength="610" clip-path="url(#terminal-2184957314-line-6)">Opened your browser. Sign in, then come back here.</text><text class="terminal-2184957314-r1" x="1049.2" y="166.4" textLength="12.2" clip-path="url(#terminal-2184957314-line-6)">
|
|
93
|
+
</text><text class="terminal-2184957314-r4" x="0" y="190.8" textLength="231.8" clip-path="url(#terminal-2184957314-line-7)">Waiting for sign-in</text><text class="terminal-2184957314-r5" x="231.8" y="190.8" textLength="36.6" clip-path="url(#terminal-2184957314-line-7)">...</text><text class="terminal-2184957314-r1" x="1049.2" y="190.8" textLength="12.2" clip-path="url(#terminal-2184957314-line-7)">
|
|
94
|
+
</text><text class="terminal-2184957314-r1" x="1049.2" y="215.2" textLength="12.2" clip-path="url(#terminal-2184957314-line-8)">
|
|
95
|
+
</text><text class="terminal-2184957314-r6" x="0" y="239.6" textLength="122" clip-path="url(#terminal-2184957314-line-9)">Signed in.</text><text class="terminal-2184957314-r1" x="122" y="239.6" textLength="207.4" clip-path="url(#terminal-2184957314-line-9)"> You can now run </text><text class="terminal-2184957314-r2" x="329.4" y="239.6" textLength="146.4" clip-path="url(#terminal-2184957314-line-9)">finch tailor</text><text class="terminal-2184957314-r1" x="475.8" y="239.6" textLength="244" clip-path="url(#terminal-2184957314-line-9)"> without an API key.</text><text class="terminal-2184957314-r1" x="1049.2" y="239.6" textLength="12.2" clip-path="url(#terminal-2184957314-line-9)">
|
|
96
|
+
</text>
|
|
97
|
+
</g>
|
|
98
|
+
</g>
|
|
99
|
+
</svg>
|
|
Binary file
|