@timurtekb/tekjobs 0.44.0 → 0.46.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/CHANGELOG.md +16 -0
- package/app/dist/assets/{index-CIqEcxvl.css → index-Dhv_7hBU.css} +1 -1
- package/app/dist/assets/{index-D9GAewm_.js → index-V6WTCNu_.js} +10 -10
- package/app/dist/index.html +2 -2
- package/app/server/index.mjs +1 -1
- package/app/server/linkedin-import.mjs +99 -2
- package/app/server/mcp.mjs +6 -2
- package/cli.mjs +13 -1
- package/package.json +1 -1
- package/samples/vault/Jobs/Basalt Systems - Senior Design Engineer, Growth (1010).md +8 -8
- package/samples/vault/Jobs/Brightline Studio - Design Engineer (1005).md +3 -3
- package/samples/vault/Jobs/Copperleaf - Principal Design Engineer (1006).md +4 -4
- package/samples/vault/Jobs/Example Studio - Senior Design Engineer (1013).md +3 -3
- package/samples/vault/Jobs/Fjord Analytics - Staff Frontend Engineer, Platform (1003).md +8 -8
- package/samples/vault/Jobs/Halcyon Robotics - Senior UX Engineer (1004).md +3 -3
- package/samples/vault/Jobs/Lumen Health - Design Systems Engineer (1002).md +3 -3
- package/samples/vault/Jobs/Meridian Pay - Staff Design Engineer (1009).md +12 -12
- package/samples/vault/Jobs/Northwind Labs - Staff Design Engineer, Design Systems (1000).md +5 -5
- package/samples/vault/Jobs/Orbital Software - Senior Design Engineer (1001).md +3 -3
- package/samples/vault/Jobs/Quill & Co - Design Engineer, Editor (1008).md +5 -5
- package/samples/vault/Jobs/Signalfire Design - Design Engineer (1012).md +4 -4
- package/samples/vault/Jobs/Tessellate - Senior Frontend Engineer, Design Systems (1007).md +3 -3
- package/samples/vault/Jobs/Verdant - UX Engineer (1011).md +4 -4
- package/samples/vault/Logs/{2026-09-16.md → 2026-10-01.md} +3 -3
- package/samples/vault/Logs/{2026-09-23.md → 2026-10-08.md} +3 -3
- package/samples/vault/People/Lee Example (Fjord Analytics).md +3 -3
- package/samples/vault/People/Priya Example (Meridian Pay).md +4 -4
- package/samples/vault/People/Sam Example (Northwind Labs).md +1 -1
- package/samples/vault/Profile/Positioning.md +1 -1
- package/samples/vault/Profile/Profile.md +1 -1
- package/samples/vault/Profile/Resume.md +1 -1
- package/samples/vault/Profile/Voice.md +1 -1
- package/samples/vault/README.md +1 -1
- package/samples/vault/Targets/Companies.md +4 -4
- package/samples/vault/Targets/Search Criteria.before-2026-09-18.md +82 -0
- package/samples/vault/Targets/Search Criteria.md +8 -2
- package/samples/vault/_Home.md +12 -13
|
@@ -5,8 +5,8 @@ role: recruiter
|
|
|
5
5
|
company: "Meridian Pay"
|
|
6
6
|
email: "priya@meridian.example.com"
|
|
7
7
|
links: ""
|
|
8
|
-
created: 2026-09-
|
|
9
|
-
last_contact: 2026-
|
|
8
|
+
created: 2026-09-24
|
|
9
|
+
last_contact: 2026-10-03
|
|
10
10
|
---
|
|
11
11
|
|
|
12
12
|
# Priya Example
|
|
@@ -18,6 +18,6 @@ Technical recruiter for the platform org. Replies within a day.
|
|
|
18
18
|
- [[Jobs/Meridian Pay - Staff Design Engineer (1009)|Meridian Pay - Staff Design Engineer]] · recruiter
|
|
19
19
|
|
|
20
20
|
## Log
|
|
21
|
-
- 2026-09-
|
|
22
|
-
- 2026-
|
|
21
|
+
- 2026-09-24 (mail): Wrote back the day after the application: "Would love to set up a 30-minute intro."
|
|
22
|
+
- 2026-10-03 (mail): Recruiter screen done; sending the platform lead my Storybook link.
|
|
23
23
|
|
package/samples/vault/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
A complete, fictional TekJobs profile folder: Jordan Example, a design engineer in Portland, three weeks into a search. Fourteen postings at companies that do not exist, one application in interview, one rejected, two passed, one listing closed, three people on the threads, two scan logs and the dashboard. Every note was written by the product's own code (`npm run sample` rebuilds it), so it is always in the shape the app expects.
|
|
4
4
|
|
|
5
|
-
Look at it in the app without touching your own folder
|
|
5
|
+
Look at it in the app without touching your own folder:
|
|
6
6
|
|
|
7
7
|
```
|
|
8
8
|
TEKJOBS_PROFILE=$PWD/samples/vault npm run serve
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
type: config
|
|
3
|
-
updated: 2026-
|
|
3
|
+
updated: 2026-10-08
|
|
4
4
|
---
|
|
5
5
|
# Company Watchlist
|
|
6
6
|
|
|
@@ -117,7 +117,7 @@ This starter list is the community registry: tech companies whose boards answer
|
|
|
117
117
|
| DoorDash | greenhouse | doordashusa | C | | |
|
|
118
118
|
| Lyft | greenhouse | lyft | C | | |
|
|
119
119
|
| Roblox | greenhouse | roblox | C | | |
|
|
120
|
-
| Amplitude |
|
|
120
|
+
| Amplitude | ashby | amplitude | C | | moved to ashby 2026-10-07 |
|
|
121
121
|
| Mixpanel | greenhouse | mixpanel | C | | |
|
|
122
122
|
| Lattice | greenhouse | lattice | C | | |
|
|
123
123
|
| Carta | greenhouse | carta | C | | |
|
|
@@ -209,7 +209,7 @@ This starter list is the community registry: tech companies whose boards answer
|
|
|
209
209
|
| GitLab | greenhouse | gitlab | A | | |
|
|
210
210
|
| Headway | ashby | headway | B | | |
|
|
211
211
|
| Hex | ashby | hex | A | | |
|
|
212
|
-
| Hightouch |
|
|
212
|
+
| Hightouch | ashby | hightouch | B | | moved to ashby 2026-10-07 |
|
|
213
213
|
| Honeycomb | greenhouse | honeycomb | B | | |
|
|
214
214
|
| Included Health | lever | includedhealth | B | | |
|
|
215
215
|
| Inngest | ashby | inngest | B | | |
|
|
@@ -236,7 +236,7 @@ This starter list is the community registry: tech companies whose boards answer
|
|
|
236
236
|
| Orum | ashby | orum | B | | |
|
|
237
237
|
| Oscar | greenhouse | oscar | B | | |
|
|
238
238
|
| Otter | greenhouse | otter | B | | |
|
|
239
|
-
| Outschool |
|
|
239
|
+
| Outschool | ashby | outschool | B | | moved to ashby 2026-10-07 |
|
|
240
240
|
| Parloa | greenhouse | parloa | B | | |
|
|
241
241
|
| Payoneer | greenhouse | payoneer | B | | |
|
|
242
242
|
| Peloton | greenhouse | peloton | B | | |
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: config
|
|
3
|
+
updated: 2026-10-08
|
|
4
|
+
---
|
|
5
|
+
# Search Criteria
|
|
6
|
+
|
|
7
|
+
> **The scraper reads the JSON block below.** The onboarding interview fills it from your resume and your answers; after that, edit it here. Weights are additive points. A job needs `minScore` to get its own note in `Jobs/`.
|
|
8
|
+
|
|
9
|
+
How scoring works:
|
|
10
|
+
- **titleTerms** — best single match in the job title counts fully, each extra match adds 5. Empty until the interview runs.
|
|
11
|
+
- **titleExclude** — any hit in the title drops the job entirely. Abbreviations are spelled out first, so "director" catches "Sr. Dir".
|
|
12
|
+
- **companyExclude** — any hit in the company name drops the job entirely: industries, staffing agencies, names.
|
|
13
|
+
- **noTitleMatchPenalty** — a posting whose title matches nothing in `titleTerms` takes this hit, so location and recency alone can't carry it over the bar.
|
|
14
|
+
- **descTerms** — each term found in the description adds its weight (capped at `descCap`).
|
|
15
|
+
- **seniority** — senior/staff/lead/principal adds; junior/intern subtracts.
|
|
16
|
+
- **location** — remote adds; with `requireRemote` on, anything not remote takes `notRemotePenalty` and drops out. Clearly non-US-only listings subtract heavily.
|
|
17
|
+
- **salary** — a stated range at or above `minAnnual` adds; between `stretchAnnual` and `minAnnual` is the stretch band (small penalty, kept visible); below subtracts. No stated range is neutral.
|
|
18
|
+
- **recency** — posted within 7 days adds, over 90 days subtracts.
|
|
19
|
+
- **openSources** — aggregator feeds that need no company slug. Set one to `false` to drop it. `wellfound` and `builtin` read those sites' remote listing pages (no API), searched by design-engineering roles; both lose to the same job from its ATS when both turn up.
|
|
20
|
+
- **email** — job alert emails you save into the `Inbox` folder of this profile, as `.eml`. This is how the boards with no public API get in: LinkedIn, Indeed, Otta and Wellfound all send alerts, and an email in your own mailbox is your own data. Nothing contacts those sites — it reads files you put there, and the links are for you to open. Links to Greenhouse, Lever, Ashby and Workday are picked up from any sender. Rows are thin (a title, a company, usually a location), so they score below the same job from an ATS and lose to it when both turn up.
|
|
21
|
+
- **adzuna** — the one source that needs a key. Set `ADZUNA_APP_ID` and `ADZUNA_APP_KEY` in the environment (free at developer.adzuna.com), turn `openSources.adzuna` on, and it searches your top `titleTerms` in each country under `adzuna.countries`. It reaches listings that never appear on a company ATS board, but its descriptions come back as snippets, so those rows score lower than the same job fetched from its ATS.
|
|
22
|
+
- **usajobs** — every US federal posting. Set `USAJOBS_API_KEY` and `USAJOBS_EMAIL` (free at developer.usajobs.gov; the email is the one the key is registered to) and turn `openSources.usajobs` on. Unlike Adzuna it returns the whole description, so these rows score on equal footing, and it carries a real application deadline.
|
|
23
|
+
|
|
24
|
+
```json
|
|
25
|
+
{
|
|
26
|
+
"minScore": 45,
|
|
27
|
+
"descCap": 35,
|
|
28
|
+
"noTitleMatchPenalty": -40,
|
|
29
|
+
"titleExtraPer": 5,
|
|
30
|
+
"titleExtraCap": 10,
|
|
31
|
+
"titleTerms": {},
|
|
32
|
+
"titleExclude": [
|
|
33
|
+
"intern", "internship", "apprentice", "new grad", "recruit", "account executive", "customer success",
|
|
34
|
+
"manufacturing", "process engineer", "chemical", "biomedical", "automotive", "aerospace"
|
|
35
|
+
],
|
|
36
|
+
"companyExclude": [],
|
|
37
|
+
"descTerms": {},
|
|
38
|
+
"seniority": {
|
|
39
|
+
"boost": { "senior": 8, "staff": 10, "lead": 10, "principal": 10, "head of": 8, "founding": 8 },
|
|
40
|
+
"penalty": { "junior": -30, "intern": -50, "entry": -25, "associate": -15, "new grad": -40 }
|
|
41
|
+
},
|
|
42
|
+
"salary": { "minAnnual": null, "stretchAnnual": null, "meetsBonus": 10, "abovePer10k": 1, "aboveCap": 8, "stretchPenalty": -8, "belowPenalty": -30 },
|
|
43
|
+
"location": {
|
|
44
|
+
"requireRemote": false,
|
|
45
|
+
"notRemotePenalty": -60,
|
|
46
|
+
"remoteBoost": 15,
|
|
47
|
+
"bayAreaBoost": 0,
|
|
48
|
+
"bayAreaTerms": [],
|
|
49
|
+
"usTerms": ["united states", "usa", "u.s.", "us-", "us ", "(us)", "us)", "north america", "americas", "remote - us", "remote us", "us remote", "anywhere"],
|
|
50
|
+
"nonUsTerms": ["london", "berlin", "paris", "amsterdam", "dublin", "europe", "emea", "uk", "united kingdom", "germany", "france", "netherlands", "spain", "portugal", "poland", "india", "bangalore", "bengaluru", "hyderabad", "singapore", "sydney", "melbourne", "australia", "toronto", "vancouver", "canada", "brazil", "são paulo", "sao paulo", "mexico city", "latam", "apac", "tokyo", "japan", "israel", "tel aviv", "stockholm", "copenhagen", "zurich", "lisbon", "warsaw", "prague", "tallinn", "riga", "riyadh", "saudi arabia", "dubai", "abu dhabi", "uae", "united arab emirates", "middle east", "korea", "seoul", "china", "shanghai", "beijing", "hong kong", "taiwan", "philippines", "vietnam", "indonesia", "nigeria", "south africa", "argentina", "colombia", "chile", "ottawa", "montreal", "waterloo"],
|
|
51
|
+
"nonUsPenalty": -45
|
|
52
|
+
},
|
|
53
|
+
"recency": { "days2": 25, "days7": 15, "days30": 5, "days90": -5, "older": -25 },
|
|
54
|
+
"openSources": {
|
|
55
|
+
"remoteok": true, "hn": true, "email": true, "adzuna": false, "usajobs": false,
|
|
56
|
+
"themuse": true, "remotive": false, "himalayas": true, "jobicy": true,
|
|
57
|
+
"workingnomads": true, "arbeitnow": false, "wwr": true,
|
|
58
|
+
"wellfound": true, "builtin": true
|
|
59
|
+
},
|
|
60
|
+
"adzuna": {
|
|
61
|
+
"_note": "Needs ADZUNA_APP_ID and ADZUNA_APP_KEY in the environment (free at developer.adzuna.com), and openSources.adzuna set to true. Searches for your top titleTerms unless queries is set. Descriptions come back as snippets, so these rows score lower than the same job from its ATS.",
|
|
62
|
+
"countries": ["us"],
|
|
63
|
+
"queries": [],
|
|
64
|
+
"maxQueries": 6,
|
|
65
|
+
"pages": 2,
|
|
66
|
+
"maxDaysOld": 30
|
|
67
|
+
},
|
|
68
|
+
"email": {
|
|
69
|
+
"_note": "Job alert emails you save into the Inbox folder of your profile, as .eml. Nothing contacts the sites; this reads files you put there. Understands LinkedIn, Indeed, Otta and Wellfound alerts, and picks up Greenhouse/Lever/Ashby/Workday links in anything else. Rows are thin — a title, a company, usually a location — so they score below the same job from an ATS.",
|
|
70
|
+
"maxFiles": 200
|
|
71
|
+
},
|
|
72
|
+
"usajobs": {
|
|
73
|
+
"_note": "Needs USAJOBS_API_KEY and USAJOBS_EMAIL in the environment (free at developer.usajobs.gov; the email is the one the key is registered to), and openSources.usajobs set to true. Every US federal posting, with full descriptions and a real application deadline. Searches your top titleTerms as position titles unless searchBy is \"keyword\" or queries is set.",
|
|
74
|
+
"queries": [],
|
|
75
|
+
"maxQueries": 6,
|
|
76
|
+
"pages": 2,
|
|
77
|
+
"datePosted": 30,
|
|
78
|
+
"searchBy": "title"
|
|
79
|
+
},
|
|
80
|
+
"maxDescriptionChars": 6000
|
|
81
|
+
}
|
|
82
|
+
```
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
type: config
|
|
3
|
-
updated: 2026-09-
|
|
3
|
+
updated: 2026-09-18
|
|
4
4
|
---
|
|
5
5
|
# Search Criteria
|
|
6
6
|
|
|
@@ -8,7 +8,8 @@ updated: 2026-09-03
|
|
|
8
8
|
|
|
9
9
|
How scoring works:
|
|
10
10
|
- **titleTerms** — best single match in the job title counts fully, each extra match adds 5. Empty until the interview runs.
|
|
11
|
-
- **titleExclude** — any hit in the title drops the job entirely.
|
|
11
|
+
- **titleExclude** — any hit in the title drops the job entirely. Abbreviations are spelled out first, so "director" catches "Sr. Dir".
|
|
12
|
+
- **companyExclude** — any hit in the company name drops the job entirely: industries, staffing agencies, names.
|
|
12
13
|
- **noTitleMatchPenalty** — a posting whose title matches nothing in `titleTerms` takes this hit, so location and recency alone can't carry it over the bar.
|
|
13
14
|
- **descTerms** — each term found in the description adds its weight (capped at `descCap`).
|
|
14
15
|
- **seniority** — senior/staff/lead/principal adds; junior/intern subtracts.
|
|
@@ -52,6 +53,11 @@ How scoring works:
|
|
|
52
53
|
"automotive",
|
|
53
54
|
"aerospace"
|
|
54
55
|
],
|
|
56
|
+
"companyExclude": [
|
|
57
|
+
"gambling",
|
|
58
|
+
"casino",
|
|
59
|
+
"staffing"
|
|
60
|
+
],
|
|
55
61
|
"descTerms": {
|
|
56
62
|
"design system": 6,
|
|
57
63
|
"design systems": 6,
|
package/samples/vault/_Home.md
CHANGED
|
@@ -1,15 +1,14 @@
|
|
|
1
1
|
---
|
|
2
2
|
type: dashboard
|
|
3
|
-
generated: 2026-
|
|
3
|
+
generated: 2026-10-08T02:20:42.022Z
|
|
4
4
|
---
|
|
5
5
|
# TekJobs — Home
|
|
6
6
|
> Generated by the scraper. Edits here get overwritten; write in the job notes or [[Applications/Pipeline Notes]].
|
|
7
7
|
|
|
8
|
-
**Last run:** 2026-
|
|
8
|
+
**Last run:** 2026-10-08 07:30 UTC · 304/304 boards fetched (0 failed) · 25340 postings scanned · **3 new matches** · log: [[Logs/2026-10-08]]
|
|
9
9
|
|
|
10
10
|
## Needs you
|
|
11
11
|
- **6** new matches waiting for a first look (below).
|
|
12
|
-
- Open profile questions in [[Profile/Profile]] (comp, remote vs hybrid, which narrative leads).
|
|
13
12
|
|
|
14
13
|
## Pipeline
|
|
15
14
|
| Status | Count |
|
|
@@ -25,12 +24,12 @@ generated: 2026-09-23T21:16:28.041Z
|
|
|
25
24
|
## New matches — top 6 of 6 by score
|
|
26
25
|
| Score | Company | Role | Location | Pay | Band | Posted | Note |
|
|
27
26
|
| --- | --- | --- | --- | --- | --- | --- | --- |
|
|
28
|
-
| 136 | Tessellate | [Senior Frontend Engineer, Design Systems](https://jobs.example.com/tessellate/senior-frontend-engineer-design-systems) | Remote, US | $185k–$225k | ✅ floor | 2026-
|
|
29
|
-
| 130 | Example Studio | [Senior Design Engineer](https://tekjobs.timurtek.com/jobs/example-tekjobs) | Remote · United States | $180k–$240k | ✅ floor | 2026-
|
|
30
|
-
| 129 | Orbital Software | [Senior Design Engineer](https://jobs.example.com/orbital/senior-design-engineer) | Remote (US) | $190k–$230k | ✅ floor | 2026-
|
|
31
|
-
| 109 | Lumen Health | [Design Systems Engineer](https://jobs.example.com/lumen/design-systems-engineer) | Remote US · Denver, CO | $175k–$205k | ✅ floor | 2026-09-
|
|
32
|
-
| 106 | Halcyon Robotics | [Senior UX Engineer](https://jobs.example.com/halcyon/senior-ux-engineer) | Remote (United States) · Boston, MA | $180k–$215k | ✅ floor | 2026-09-
|
|
33
|
-
| 95 | Brightline Studio | [Design Engineer](https://jobs.example.com/brightline/design-engineer) | Remote · United States | $160k–$195k | ↗ stretch | 2026-
|
|
27
|
+
| 136 | Tessellate | [Senior Frontend Engineer, Design Systems](https://jobs.example.com/tessellate/senior-frontend-engineer-design-systems) | Remote, US | $185k–$225k | ✅ floor | 2026-10-01 | [[Jobs/Tessellate - Senior Frontend Engineer, Design Systems (1007)\|open]] |
|
|
28
|
+
| 130 | Example Studio | [Senior Design Engineer](https://tekjobs.timurtek.com/jobs/example-tekjobs) | Remote · United States | $180k–$240k | ✅ floor | 2026-10-08 | [[Jobs/Example Studio - Senior Design Engineer (1013)\|open]] |
|
|
29
|
+
| 129 | Orbital Software | [Senior Design Engineer](https://jobs.example.com/orbital/senior-design-engineer) | Remote (US) | $190k–$230k | ✅ floor | 2026-10-02 | [[Jobs/Orbital Software - Senior Design Engineer (1001)\|open]] |
|
|
30
|
+
| 109 | Lumen Health | [Design Systems Engineer](https://jobs.example.com/lumen/design-systems-engineer) | Remote US · Denver, CO | $175k–$205k | ✅ floor | 2026-09-26 | [[Jobs/Lumen Health - Design Systems Engineer (1002)\|open]] |
|
|
31
|
+
| 106 | Halcyon Robotics | [Senior UX Engineer](https://jobs.example.com/halcyon/senior-ux-engineer) | Remote (United States) · Boston, MA | $180k–$215k | ✅ floor | 2026-09-23 | [[Jobs/Halcyon Robotics - Senior UX Engineer (1004)\|open]] |
|
|
32
|
+
| 95 | Brightline Studio | [Design Engineer](https://jobs.example.com/brightline/design-engineer) | Remote · United States | $160k–$195k | ↗ stretch | 2026-10-07 | [[Jobs/Brightline Studio - Design Engineer (1005)\|open]] |
|
|
34
33
|
|
|
35
34
|
## Stretch band — stated pay $180k to $220k (1)
|
|
36
35
|
_Visible on purpose, scored slightly down. Senior-level roles that would want a negotiation to reach the floor._
|
|
@@ -41,12 +40,12 @@ _Visible on purpose, scored slightly down. Senior-level roles that would want a
|
|
|
41
40
|
## Active applications
|
|
42
41
|
| Status | Company | Role | Found | Note |
|
|
43
42
|
| --- | --- | --- | --- | --- |
|
|
44
|
-
| applied | Fjord Analytics | [Staff Frontend Engineer, Platform](https://jobs.example.com/fjord/staff-frontend-engineer-platform) | 2026-09-
|
|
45
|
-
| interviewing | Meridian Pay | [Staff Design Engineer](https://jobs.example.com/meridian/staff-design-engineer) | 2026-09-
|
|
46
|
-
| applying | Northwind Labs | [Staff Design Engineer, Design Systems](https://jobs.example.com/northwind/staff-design-engineer-design-systems) | 2026-
|
|
43
|
+
| applied | Fjord Analytics | [Staff Frontend Engineer, Platform](https://jobs.example.com/fjord/staff-frontend-engineer-platform) | 2026-09-30 | [[Jobs/Fjord Analytics - Staff Frontend Engineer, Platform (1003)\|open]] |
|
|
44
|
+
| interviewing | Meridian Pay | [Staff Design Engineer](https://jobs.example.com/meridian/staff-design-engineer) | 2026-09-18 | [[Jobs/Meridian Pay - Staff Design Engineer (1009)\|open]] |
|
|
45
|
+
| applying | Northwind Labs | [Staff Design Engineer, Design Systems](https://jobs.example.com/northwind/staff-design-engineer-design-systems) | 2026-10-06 | [[Jobs/Northwind Labs - Staff Design Engineer, Design Systems (1000)\|open]] |
|
|
47
46
|
|
|
48
47
|
## Listings that closed before review
|
|
49
|
-
- Verdant — UX Engineer (closed 2026-09-
|
|
48
|
+
- Verdant — UX Engineer (closed 2026-09-29) [[Jobs/Verdant - UX Engineer (1011)|open]]
|
|
50
49
|
|
|
51
50
|
## Map
|
|
52
51
|
- [[Profile/Profile]] · [[Profile/Resume - Master]] · [[Profile/Positioning]]
|