loredata 0.1.0 → 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.
Files changed (95) hide show
  1. package/README.md +72 -21
  2. package/data/avengers/addresses.json +27 -0
  3. package/data/avengers/characters.json +178 -0
  4. package/data/avengers/meta.json +13 -0
  5. package/data/better-call-saul/addresses.json +37 -0
  6. package/data/better-call-saul/characters.json +156 -0
  7. package/data/better-call-saul/meta.json +13 -0
  8. package/data/big-bang-theory/addresses.json +31 -0
  9. package/data/big-bang-theory/characters.json +121 -0
  10. package/data/big-bang-theory/meta.json +13 -0
  11. package/data/breaking-bad/characters.json +49 -13
  12. package/data/breaking-bad/meta.json +10 -1
  13. package/data/fast-and-furious/characters.json +39 -13
  14. package/data/fast-and-furious/meta.json +15 -1
  15. package/data/friends/characters.json +138 -22
  16. package/data/friends/meta.json +13 -1
  17. package/data/game-of-thrones/characters.json +61 -16
  18. package/data/game-of-thrones/meta.json +10 -1
  19. package/data/guardians-of-the-galaxy/addresses.json +17 -0
  20. package/data/guardians-of-the-galaxy/characters.json +124 -0
  21. package/data/guardians-of-the-galaxy/meta.json +13 -0
  22. package/data/harry-potter/characters.json +37 -7
  23. package/data/harry-potter/meta.json +10 -1
  24. package/data/house-md/characters.json +79 -25
  25. package/data/house-md/meta.json +13 -1
  26. package/data/lost/characters.json +144 -36
  27. package/data/lost/meta.json +13 -1
  28. package/data/matrix/characters.json +133 -34
  29. package/data/matrix/meta.json +18 -1
  30. package/data/peaky-blinders/characters.json +44 -11
  31. package/data/peaky-blinders/meta.json +13 -1
  32. package/data/prison-break/addresses.json +24 -0
  33. package/data/prison-break/characters.json +116 -0
  34. package/data/prison-break/meta.json +13 -0
  35. package/data/sherlock/characters.json +116 -27
  36. package/data/sherlock/meta.json +13 -1
  37. package/data/simpsons/addresses.json +21 -0
  38. package/data/simpsons/characters.json +219 -0
  39. package/data/simpsons/meta.json +13 -0
  40. package/data/sopranos/addresses.json +37 -0
  41. package/data/sopranos/characters.json +184 -0
  42. package/data/sopranos/meta.json +13 -0
  43. package/data/south-park/addresses.json +31 -0
  44. package/data/south-park/characters.json +230 -0
  45. package/data/south-park/meta.json +13 -0
  46. package/data/spider-man/addresses.json +31 -0
  47. package/data/spider-man/characters.json +134 -0
  48. package/data/spider-man/meta.json +13 -0
  49. package/data/star-wars/addresses.json +19 -0
  50. package/data/star-wars/characters.json +153 -0
  51. package/data/star-wars/meta.json +13 -0
  52. package/data/supernatural/addresses.json +25 -0
  53. package/data/supernatural/characters.json +113 -0
  54. package/data/supernatural/meta.json +13 -0
  55. package/data/the-office/characters.json +84 -29
  56. package/data/the-office/meta.json +10 -1
  57. package/data/the-walking-dead/addresses.json +25 -0
  58. package/data/the-walking-dead/characters.json +114 -0
  59. package/data/the-walking-dead/meta.json +13 -0
  60. package/data/westworld/addresses.json +19 -0
  61. package/data/westworld/characters.json +108 -0
  62. package/data/westworld/meta.json +13 -0
  63. package/data/x-men/addresses.json +24 -0
  64. package/data/x-men/characters.json +158 -0
  65. package/data/x-men/meta.json +18 -0
  66. package/dist/browser.cjs +114 -69
  67. package/dist/browser.cjs.map +1 -1
  68. package/dist/browser.d.cts +7 -3
  69. package/dist/browser.d.ts +7 -3
  70. package/dist/browser.js +110 -69
  71. package/dist/browser.js.map +1 -1
  72. package/dist/cli/cli.cjs +131 -70
  73. package/dist/cli/cli.cjs.map +1 -1
  74. package/dist/cli/cli.js +132 -71
  75. package/dist/cli/cli.js.map +1 -1
  76. package/dist/index.cjs +132 -68
  77. package/dist/index.cjs.map +1 -1
  78. package/dist/index.d.cts +15 -4
  79. package/dist/index.d.ts +15 -4
  80. package/dist/index.js +132 -69
  81. package/dist/index.js.map +1 -1
  82. package/dist/{universe-store-DJrm7bP7.d.cts → universe-store-CWhCn3U6.d.cts} +31 -19
  83. package/dist/{universe-store-DJrm7bP7.d.ts → universe-store-CWhCn3U6.d.ts} +31 -19
  84. package/package.json +12 -4
  85. package/data/breaking-bad/domains.json +0 -6
  86. package/data/fast-and-furious/domains.json +0 -6
  87. package/data/friends/domains.json +0 -6
  88. package/data/game-of-thrones/domains.json +0 -6
  89. package/data/harry-potter/domains.json +0 -6
  90. package/data/house-md/domains.json +0 -6
  91. package/data/lost/domains.json +0 -6
  92. package/data/matrix/domains.json +0 -6
  93. package/data/peaky-blinders/domains.json +0 -6
  94. package/data/sherlock/domains.json +0 -6
  95. package/data/the-office/domains.json +0 -6
package/README.md CHANGED
@@ -1,20 +1,51 @@
1
- # loredata
1
+ <p align="center">
2
+ <img src="https://raw.githubusercontent.com/orchidfiles/loredata/main/apps/web/static/logo.png" alt="LoreData" width="80" />
3
+ </p>
2
4
 
3
- [![npm version](https://img.shields.io/npm/v/loredata)](https://www.npmjs.com/package/loredata)
4
- [![npm downloads per month](https://img.shields.io/npm/dm/loredata)](https://www.npmjs.com/package/loredata)
5
- [![node version](https://img.shields.io/node/v/loredata)](https://nodejs.org)
6
- [![license](https://img.shields.io/npm/l/loredata)](./LICENSE)
7
- [![last commit](https://img.shields.io/github/last-commit/orchidfiles/loredata)](https://github.com/orchidfiles/loredata)
5
+ <h3 align="center">LoreData</h3>
8
6
 
9
- Generate fake personas using real characters from pop culture universes. Every field — name, email, address, profession, quote — comes from the same fictional world.
7
+ <p align="center">
8
+ Generate fake personas using real characters from pop culture universes.<br/>
9
+ Every field — name, email, address, profession, quote — comes from the same fictional world.
10
+ </p>
11
+
12
+ <p align="center">
13
+ <a href="https://www.npmjs.com/package/loredata"><img src="https://img.shields.io/npm/v/loredata" alt="npm version" /></a>
14
+ <a href="https://www.npmjs.com/package/loredata"><img src="https://img.shields.io/npm/dm/loredata" alt="npm downloads per month" /></a>
15
+ <a href="https://nodejs.org"><img src="https://img.shields.io/node/v/loredata" alt="node version" /></a>
16
+ <a href="./LICENSE"><img src="https://img.shields.io/npm/l/loredata" alt="license" /></a>
17
+ <a href="https://github.com/orchidfiles/loredata"><img src="https://img.shields.io/github/last-commit/orchidfiles/loredata" alt="last commit" /></a>
18
+ </p>
19
+
20
+ <img src="https://raw.githubusercontent.com/orchidfiles/loredata/main/apps/web/static/screen.png" alt="LoreData screenshot" />
21
+
22
+ **Demo:** [loredata.orchidfiles.com](https://loredata.orchidfiles.com)
10
23
 
11
24
  ```ts
12
25
  import { person, group } from 'loredata';
13
26
 
14
27
  const p = person({ universe: 'breaking-bad' });
15
- // { firstName: 'Walter', lastName: 'White', email: 'heisenberg@lospollos.com', ... }
28
+ // {
29
+ // firstName: 'Walter',
30
+ // lastName: 'White',
31
+ // username: 'heisenberg',
32
+ // email: 'blue_sky_cook@lospollos.com',
33
+ // quote: "I am the one who knocks.",
34
+ // profession: 'Chemistry teacher',
35
+ // interests: ['chemistry', 'cooking', 'family'],
36
+ // address: { street: '308 Negra Arroyo Lane', city: 'Albuquerque', state: 'NM' },
37
+ // symbol: '☢️',
38
+ // color: '#4c1d95',
39
+ // universe: 'breaking-bad',
40
+ // universeName: 'Breaking Bad'
41
+ // }
16
42
 
17
43
  const team = group({ universe: 'game-of-thrones', size: 3 });
44
+ // [
45
+ // { firstName: 'Jon', lastName: 'Snow', username: 'lord_commander', ... },
46
+ // { firstName: 'Daenerys', lastName: 'Targaryen', username: 'mother_of_dragons', ... },
47
+ // { firstName: 'Tyrion', lastName: 'Lannister', username: 'halfman', ... },
48
+ // ]
18
49
  ```
19
50
 
20
51
  Works in Node.js, browser, and as a CLI tool.
@@ -22,27 +53,39 @@ Works in Node.js, browser, and as a CLI tool.
22
53
  ## Install
23
54
 
24
55
  ```sh
56
+ # library
25
57
  npm install loredata
58
+
59
+ # CLI
60
+ npm install -g loredata
26
61
  ```
27
62
 
28
63
  ## Universes
29
64
 
30
- Available out of the box: `breaking-bad`, `friends`, `game-of-thrones`, `harry-potter`, `house-md`, `lost`, `fast-and-furious`, `matrix`, `peaky-blinders`, `sherlock`, `the-office`
65
+ 25 universes available out of the box:
66
+
67
+ `breaking-bad`, `sopranos`, `better-call-saul`, `the-office`, `house-md`, `sherlock`, `peaky-blinders`, `game-of-thrones`, `friends`, `south-park`, `star-wars`, `matrix`, `the-walking-dead`, `prison-break`, `westworld`, `supernatural`, `simpsons`, `avengers`, `spider-man`, `lost`, `harry-potter`, `guardians-of-the-galaxy`, `big-bang-theory`, `x-men`, `fast-and-furious`
31
68
 
32
69
  ```ts
33
70
  import { universes } from 'loredata';
34
71
 
35
72
  universes();
36
73
  // [
37
- // { id: 'sherlock', name: 'Sherlock', characterCount: 9 },
38
- // { id: 'game-of-thrones', name: 'Game of Thrones', characterCount: 15 },
74
+ // { id: 'sherlock', name: 'Sherlock', genre: ['crime', 'drama', 'mystery'], description: '...' },
75
+ // { id: 'game-of-thrones', name: 'Game of Thrones', genre: ['fantasy', 'drama', 'action'], description: '...' },
39
76
  // ...
40
77
  // ]
41
78
  ```
42
79
 
43
80
  ## Persona fields
44
81
 
45
- Each `Person` includes: `firstName`, `lastName`, `username`, `email`, `password`, `phone`, `address`, `profession`, `interests`, `quote`, `avatar`, `universe`.
82
+ Each `Person` includes:
83
+
84
+ - `firstName`, `lastName`
85
+ - `username`, `email`
86
+ - `address`, `profession`, `interests`
87
+ - `quote`, `symbol`, `color`
88
+ - `universe`, `universeName`
46
89
 
47
90
  ## Deterministic output
48
91
 
@@ -55,7 +98,10 @@ const p = person({ universe: 'matrix', seed: 42 });
55
98
  ## Browser
56
99
 
57
100
  ```ts
58
- import { UniverseStore } from 'loredata/browser';
101
+ import { loadUniverse, personFromData } from 'loredata/browser';
102
+
103
+ const universe = await loadUniverse('breaking-bad');
104
+ const p = personFromData(universe);
59
105
  ```
60
106
 
61
107
  No `fs` or `path` — safe for Vite, webpack, and any browser bundler.
@@ -63,19 +109,24 @@ No `fs` or `path` — safe for Vite, webpack, and any browser bundler.
63
109
  ## CLI
64
110
 
65
111
  ```sh
66
- npx loredata person --universe breaking-bad
67
- npx loredata group --universe friends --size 5
68
- npx loredata universes
112
+ loredata person --universe breaking-bad
113
+ loredata person --universe breaking-bad --format json
114
+ loredata person --interests chemistry,cooking
115
+ loredata person --interests chemistry,cooking --interests-mode and
116
+ loredata person --name walter
117
+ loredata group --universe friends --size 5
118
+ loredata universes
69
119
  ```
70
120
 
71
121
  ## Features
72
122
 
73
- - [x] 11 universes with characters, addresses, domains
123
+ - [x] 25 universes
74
124
  - [x] Single persona and group generation
75
125
  - [x] Filter characters by interest, name, universe
76
126
  - [x] Deterministic output via seed
77
127
  - [x] Browser-safe entry point
78
128
  - [x] CLI tool
129
+ - [x] Character symbol and color fields
79
130
 
80
131
  ## Development
81
132
 
@@ -94,20 +145,20 @@ pnpm --filter @loredata/dev-kit build
94
145
  Build the library:
95
146
 
96
147
  ```sh
97
- pnpm run package:build
148
+ pnpm --filter loredata build
98
149
  ```
99
150
 
100
- Run the demo app:
151
+ Run the web app:
101
152
 
102
153
  ```sh
103
- pnpm run demo:dev
154
+ pnpm --filter @loredata/web dev
104
155
  ```
105
156
 
106
157
  ## Why
107
158
 
108
159
  Faker.js generates random names and emails. They are internally consistent but meaningless. No shared context, no character identity.
109
160
 
110
- `loredata` generates personas from real fictional characters. Each persona is recognizable and internally consistent, which makes it useful for demos, screenshots, and seed files where the content matters.
161
+ `LoreData` generates personas from real fictional characters. Each persona is recognizable and internally consistent, which makes it useful for demos, screenshots, and seed files where the content matters.
111
162
 
112
163
  ## License
113
164
 
@@ -0,0 +1,27 @@
1
+ [
2
+ {
3
+ "street": "200 Park Avenue",
4
+ "city": "New York",
5
+ "state": "NY",
6
+ "zip": "10166",
7
+ "country": "US"
8
+ },
9
+ {
10
+ "city": "Upstate New York",
11
+ "state": "NY",
12
+ "country": "US"
13
+ },
14
+ {
15
+ "street": "1327 F Street NW",
16
+ "city": "Washington",
17
+ "state": "DC",
18
+ "zip": "20004",
19
+ "country": "US"
20
+ },
21
+ {
22
+ "city": "Wakanda"
23
+ },
24
+ {
25
+ "city": "Asgard"
26
+ }
27
+ ]
@@ -0,0 +1,178 @@
1
+ [
2
+ {
3
+ "id": "tony-stark",
4
+ "firstName": "Tony",
5
+ "lastName": "Stark",
6
+ "usernames": ["iron_man", "genius_billionaire", "arc_reactor"],
7
+ "profession": "Inventor",
8
+ "interests": ["engineering", "robotics", "racing", "family"],
9
+ "quotes": [
10
+ "I am Iron Man.",
11
+ "And I... am... Iron Man.",
12
+ "I love you three thousand.",
13
+ "Genius, billionaire, playboy, philanthropist.",
14
+ "Part of the journey is the end."
15
+ ],
16
+ "gender": "male",
17
+ "birthYear": 1970,
18
+ "address": {
19
+ "street": "200 Park Avenue",
20
+ "city": "New York",
21
+ "state": "NY",
22
+ "country": "US"
23
+ },
24
+ "symbol": "⚙️",
25
+ "color": "#7f1d1d",
26
+ "emailDomains": ["stark-industries.com", "ironmail.net"]
27
+ },
28
+ {
29
+ "id": "steve-rogers",
30
+ "firstName": "Steve",
31
+ "lastName": "Rogers",
32
+ "usernames": ["i_can_do_this_all_day", "first_avenger", "man_out_of_time"],
33
+ "profession": "Soldier",
34
+ "interests": ["art", "history", "fitness", "leadership"],
35
+ "quotes": [
36
+ "I can do this all day.",
37
+ "Avengers, assemble.",
38
+ "I'm with you till the end of the line.",
39
+ "I don't want to kill anyone. I don't like bullies; I don't care where they're from.",
40
+ "The price of freedom is high. It always has been.",
41
+ "Whatever it takes."
42
+ ],
43
+ "gender": "male",
44
+ "birthYear": 1918,
45
+ "symbol": "🛡️",
46
+ "color": "#1e3a5f",
47
+ "emailDomains": ["shield.gov", "avengers-hq.net"]
48
+ },
49
+ {
50
+ "id": "thor",
51
+ "firstName": "Thor",
52
+ "lastName": "Odinson",
53
+ "usernames": ["god_of_thunder", "son_of_odin", "point_break"],
54
+ "profession": "King of Asgard",
55
+ "interests": ["combat", "lightning", "beer", "adventure"],
56
+ "quotes": [
57
+ "Bring me Thanos!",
58
+ "I'm still worthy!",
59
+ "Another!",
60
+ "I went for the head.",
61
+ "He's a friend from work!"
62
+ ],
63
+ "gender": "male",
64
+ "symbol": "⚡",
65
+ "color": "#166534",
66
+ "emailDomains": ["asgard-mail.net", "avengers-hq.net"]
67
+ },
68
+ {
69
+ "id": "bruce-banner",
70
+ "firstName": "Bruce",
71
+ "lastName": "Banner",
72
+ "usernames": ["always_angry", "other_guy", "big_green_guy"],
73
+ "profession": "Physicist",
74
+ "interests": ["physics", "meditation", "gamma radiation", "biology"],
75
+ "quotes": [
76
+ "That's my secret, Captain. I'm always angry.",
77
+ "I put a bullet in my mouth and the other guy spit it out.",
78
+ "I don't know how to fly one of these."
79
+ ],
80
+ "gender": "male",
81
+ "symbol": "🟢",
82
+ "color": "#4c1d95",
83
+ "emailDomains": ["shield.gov", "gamma-labs.net"]
84
+ },
85
+ {
86
+ "id": "natasha-romanoff",
87
+ "firstName": "Natasha",
88
+ "lastName": "Romanoff",
89
+ "usernames": ["budapest", "red_ledger", "natalia_romanova"],
90
+ "profession": "Spy",
91
+ "interests": ["espionage", "martial arts", "languages", "strategy"],
92
+ "quotes": [
93
+ "I've got red in my ledger. I'd like to wipe it out.",
94
+ "We don't wanna kill you. But we will.",
95
+ "Whatever it takes."
96
+ ],
97
+ "gender": "female",
98
+ "symbol": "🕷️",
99
+ "color": "#7f1d1d",
100
+ "emailDomains": ["shield.gov", "red-room.net"]
101
+ },
102
+ {
103
+ "id": "clint-barton",
104
+ "firstName": "Clint",
105
+ "lastName": "Barton",
106
+ "usernames": ["bow_and_arrow", "ronin_blade", "end_of_the_line"],
107
+ "profession": "Archer",
108
+ "interests": ["archery", "farming", "family", "woodworking"],
109
+ "quotes": [
110
+ "The city is flying, we're fighting an army of robots, and I have a bow and arrow. None of this makes sense.",
111
+ "You step out that door, you're an Avenger.",
112
+ "I retire for, what, like five minutes, and it all goes to shit.",
113
+ "Nobody would know. Nobody. Last I saw him, an Ultron was sitting on him.",
114
+ "Don't give me hope."
115
+ ],
116
+ "gender": "male",
117
+ "symbol": "🏹",
118
+ "color": "#4a1942",
119
+ "emailDomains": ["shield.gov", "avengers-hq.net"]
120
+ },
121
+ {
122
+ "id": "loki",
123
+ "firstName": "Loki",
124
+ "lastName": "Laufeyson",
125
+ "usernames": ["god_of_mischief", "burdened_with_purpose", "puny_god"],
126
+ "profession": "Trickster",
127
+ "interests": ["magic", "theater", "deception", "conquest"],
128
+ "quotes": [
129
+ "I am Loki, of Asgard, and I am burdened with glorious purpose.",
130
+ "If it's all the same to you, I'll have that drink now.",
131
+ "Is not this simpler? Is this not your natural state?",
132
+ "You... will never be... a god.",
133
+ "I assure you, brother, the sun will shine on us again."
134
+ ],
135
+ "gender": "male",
136
+ "symbol": "🐍",
137
+ "color": "#1e3a5f",
138
+ "emailDomains": ["asgard-mail.net", "tva-nexus.org"]
139
+ },
140
+ {
141
+ "id": "nick-fury",
142
+ "firstName": "Nick",
143
+ "lastName": "Fury",
144
+ "usernames": ["trust_no_one", "helicarrier", "avengers_initiative"],
145
+ "profession": "Spy director",
146
+ "interests": ["intelligence", "strategy", "surveillance", "cats"],
147
+ "quotes": [
148
+ "I still believe in heroes.",
149
+ "I recognize the council has made a decision, but given that it's a stupid-ass decision, I've elected to ignore it.",
150
+ "There was an idea to bring together a group of remarkable people.",
151
+ "Last time I trusted someone, I lost an eye."
152
+ ],
153
+ "gender": "male",
154
+ "symbol": "🛰️",
155
+ "color": "#134e4a",
156
+ "emailDomains": ["shield.gov", "espionage-net.org"]
157
+ },
158
+ {
159
+ "id": "thanos",
160
+ "firstName": "Thanos",
161
+ "lastName": "",
162
+ "usernames": ["mad_titan", "inevitable_one", "balanced_universe"],
163
+ "profession": "Warlord",
164
+ "interests": ["philosophy", "conquest", "balance", "farming"],
165
+ "quotes": [
166
+ "I am inevitable.",
167
+ "Reality is often disappointing.",
168
+ "The hardest choices require the strongest wills.",
169
+ "You should have gone for the head.",
170
+ "Dread it. Run from it. Destiny arrives all the same.",
171
+ "A small price to pay for salvation."
172
+ ],
173
+ "gender": "male",
174
+ "symbol": "🟣",
175
+ "color": "#854d0e",
176
+ "emailDomains": ["titan-post.net", "infinity-order.org"]
177
+ }
178
+ ]
@@ -0,0 +1,13 @@
1
+ {
2
+ "id": "avengers",
3
+ "name": "The Avengers",
4
+ "genre": ["action", "sci-fi", "adventure"],
5
+ "description": "Earth's mightiest heroes assemble to fight global threats no single hero can face alone.",
6
+ "tmdbId": 24428,
7
+ "mediaType": "movie",
8
+ "year": 2012,
9
+ "rating": 8,
10
+ "networks": ["Marvel Studios"],
11
+ "posterPath": "/RYMX2wcKCBAr24UyPD7xwmjaTn.jpg",
12
+ "backdropPath": "/9BBTo63ANSmhC4e6r62OJFuK2GL.jpg"
13
+ }
@@ -0,0 +1,37 @@
1
+ [
2
+ {
3
+ "street": "9800 Montgomery Blvd NE",
4
+ "city": "Albuquerque",
5
+ "state": "NM",
6
+ "zip": "87111",
7
+ "country": "US"
8
+ },
9
+ {
10
+ "street": "4257 Isleta Blvd SW",
11
+ "city": "Albuquerque",
12
+ "state": "NM",
13
+ "zip": "87105",
14
+ "country": "US"
15
+ },
16
+ {
17
+ "street": "160 Juan Tabo Blvd NE",
18
+ "city": "Albuquerque",
19
+ "state": "NM",
20
+ "zip": "87123",
21
+ "country": "US"
22
+ },
23
+ {
24
+ "street": "6501 Montgomery Blvd NE",
25
+ "city": "Albuquerque",
26
+ "state": "NM",
27
+ "zip": "87109",
28
+ "country": "US"
29
+ },
30
+ {
31
+ "street": "2727 Rio Grande Blvd NW",
32
+ "city": "Albuquerque",
33
+ "state": "NM",
34
+ "zip": "87104",
35
+ "country": "US"
36
+ }
37
+ ]
@@ -0,0 +1,156 @@
1
+ [
2
+ {
3
+ "id": "jimmy-mcgill",
4
+ "firstName": "Jimmy",
5
+ "lastName": "McGill",
6
+ "usernames": ["slippin_jimmy", "saul_goodman_esq", "better_call_saul", "viktor_with_a_k"],
7
+ "profession": "Lawyer",
8
+ "interests": ["law", "scams", "advertising", "elder law", "money"],
9
+ "quotes": [
10
+ "I'm the last line of defense for the little guy.",
11
+ "I just talked you down from a death sentence to six months' probation. I'm the best lawyer ever.",
12
+ "You don't need a criminal lawyer. You need a criminal lawyer.",
13
+ "It's all good, man.",
14
+ "I travel in worlds you can't even imagine.",
15
+ "The name's McGill. I'm James McGill."
16
+ ],
17
+ "gender": "male",
18
+ "birthYear": 1960,
19
+ "symbol": "⚖️",
20
+ "color": "#1e3a5f",
21
+ "emailDomains": ["saul-goodman.net", "hm-law.com", "abq-bar.org"]
22
+ },
23
+ {
24
+ "id": "mike-ehrmantraut",
25
+ "firstName": "Mike",
26
+ "lastName": "Ehrmantraut",
27
+ "usernames": ["the_fixer", "no_half_measures", "philly_on_the_job", "pimento_guy"],
28
+ "profession": "Fixer",
29
+ "interests": ["security", "family", "chess", "surveillance"],
30
+ "quotes": [
31
+ "I've known good criminals and bad cops. Bad priests. Honorable thieves. You can be on one side of the law or the other. But if you make a deal with somebody, you keep your word.",
32
+ "I have spent my whole life trying to work my way back from a mistake I made. And I made it worse.",
33
+ "We all make our choices. And those choices, they put us on a road.",
34
+ "Because I know why I'm out here. That's how. I know what it's for.",
35
+ "Your dad's gonna be okay. Because anyone who goes after him is gonna have to come through me."
36
+ ],
37
+ "gender": "male",
38
+ "symbol": "🧹",
39
+ "color": "#1d4ed8",
40
+ "emailDomains": ["abq-mail.net", "ehrmantraut-security.com"]
41
+ },
42
+ {
43
+ "id": "kim-wexler",
44
+ "firstName": "Kim",
45
+ "lastName": "Wexler",
46
+ "usernames": ["giselle_saint_claire", "mesa_verde_kim", "wexler_law"],
47
+ "profession": "Lawyer",
48
+ "interests": ["law", "pro bono work", "banking law", "Mesa Verde"],
49
+ "quotes": [
50
+ "You don't save me. I save me.",
51
+ "Either we end this now, or... maybe we get married?",
52
+ "I don't trust you.",
53
+ "We are bad for everyone around us. Apart we're okay, but together we're poison.",
54
+ "I'm glad you're alive."
55
+ ],
56
+ "gender": "female",
57
+ "symbol": "🌊",
58
+ "color": "#0f4c75",
59
+ "emailDomains": ["hm-law.com", "abq-bar.org"]
60
+ },
61
+ {
62
+ "id": "gus-fring",
63
+ "firstName": "Gustavo",
64
+ "lastName": "Fring",
65
+ "usernames": ["los_pollos_boss", "chicken_man_abq", "plain_sight_gus"],
66
+ "profession": "Fast food entrepreneur",
67
+ "interests": ["business", "philanthropy", "revenge", "chemistry"],
68
+ "quotes": [
69
+ "A bullet to the head would have been far too humane.",
70
+ "I am what I am.",
71
+ "I understand blood for blood. Hector? Yeah, I kept him alive. Kept him broken.",
72
+ "This is America. Here, the righteous have no reason to fear.",
73
+ "I never asked for this. I do not want it."
74
+ ],
75
+ "gender": "male",
76
+ "symbol": "🍗",
77
+ "color": "#7f1d1d",
78
+ "emailDomains": ["los-pollos.com", "pollos-hermanos.net"]
79
+ },
80
+ {
81
+ "id": "nacho-varga",
82
+ "firstName": "Ignacio",
83
+ "lastName": "Varga",
84
+ "usernames": ["nacho_varga", "sugar_pill_switch", "not_on_the_cartel_books"],
85
+ "profession": "Cartel enforcer",
86
+ "interests": ["family", "cars", "upholstery", "getting out"],
87
+ "quotes": [
88
+ "I put you in that chair. Your heart meds? I switched them for sugar pills.",
89
+ "I opened Lalo's gate, and I would do it again.",
90
+ "I would have done it for free. Because I hate every last one of you psycho sacks of shit.",
91
+ "You are screwed. You want the cartel to blame me for Lalo. But if they catch me, and make me talk? That is not good for you.",
92
+ "My father is a simple man. He is not in the business."
93
+ ],
94
+ "gender": "male",
95
+ "symbol": "🔑",
96
+ "color": "#166534",
97
+ "emailDomains": ["abq-mail.net"]
98
+ },
99
+ {
100
+ "id": "lalo-salamanca",
101
+ "firstName": "Eduardo",
102
+ "lastName": "Salamanca",
103
+ "usernames": ["lalo_salamanca", "jorge_de_guzman", "cousin_lalo"],
104
+ "profession": "Cartel boss",
105
+ "interests": ["cars", "cooking", "family honor", "revenge"],
106
+ "quotes": [
107
+ "You're the guy with a mouth.",
108
+ "You're nobody! I mean, no offense, but nobody's gonna look twice at you!",
109
+ "When it's like this... that's when I can think. I get my best ideas when everybody else is asleep.",
110
+ "Gustavo thought he was building an empire, but all he built himself was a tomb.",
111
+ "Let them keep believing I'm dead. So much the better."
112
+ ],
113
+ "gender": "male",
114
+ "symbol": "🦂",
115
+ "color": "#6b2737",
116
+ "emailDomains": ["cartel-mx.net", "salamanca-family.com"]
117
+ },
118
+ {
119
+ "id": "howard-hamlin",
120
+ "firstName": "Howard",
121
+ "lastName": "Hamlin",
122
+ "usernames": ["hamlin_hhm", "hamlindigo_blue", "howard_at_hhm"],
123
+ "profession": "Lawyer",
124
+ "interests": ["law", "tennis", "golf", "firm reputation"],
125
+ "quotes": [
126
+ "You've mistaken my kindness for weakness.",
127
+ "I think you're an asshole.",
128
+ "You want to know what's weird? It's weird to offer a job to a man, and in return have bowling balls thrown at your car.",
129
+ "There's proving, and then there's knowing.",
130
+ "You can't hide who you really are forever."
131
+ ],
132
+ "gender": "male",
133
+ "symbol": "🏛️",
134
+ "color": "#2d4a7a",
135
+ "emailDomains": ["hm-law.com"]
136
+ },
137
+ {
138
+ "id": "chuck-mcgill",
139
+ "firstName": "Charles",
140
+ "lastName": "McGill",
141
+ "usernames": ["chuck_mcgill_esq", "the_founding_mcgill", "electromagnetic_chuck"],
142
+ "profession": "Lawyer",
143
+ "interests": ["law", "classical music", "reading", "the rule of law"],
144
+ "quotes": [
145
+ "Slippin' Jimmy with a law degree is like a chimp with a machine gun!",
146
+ "The law is sacred! If you abuse that power, people get hurt!",
147
+ "I know you. I know what you were, what you are. People don't change.",
148
+ "Let justice be done, though the heavens fall.",
149
+ "My brother is not a bad person. He has a good heart. It's just he can't help himself."
150
+ ],
151
+ "gender": "male",
152
+ "symbol": "🕯️",
153
+ "color": "#3d2b1f",
154
+ "emailDomains": ["hm-law.com", "abq-bar.org"]
155
+ }
156
+ ]
@@ -0,0 +1,13 @@
1
+ {
2
+ "id": "better-call-saul",
3
+ "name": "Better Call Saul",
4
+ "genre": ["crime", "drama", "thriller"],
5
+ "description": "A small-time lawyer in Albuquerque transforms into the morally compromised criminal attorney Saul Goodman, drawn step by step into the world of drug cartels and organized crime.",
6
+ "tmdbId": 60059,
7
+ "mediaType": "tv",
8
+ "year": 2015,
9
+ "rating": 8.7,
10
+ "networks": ["AMC"],
11
+ "posterPath": "/zjg4jpK1Wp2kiRvtt5ND0kznako.jpg",
12
+ "backdropPath": "/t15KHp3iNfHVQBNIaqUGW12xQA4.jpg"
13
+ }
@@ -0,0 +1,31 @@
1
+ [
2
+ {
3
+ "street": "2311 North Los Robles Avenue",
4
+ "city": "Pasadena",
5
+ "state": "CA",
6
+ "country": "US"
7
+ },
8
+ {
9
+ "street": "1200 East California Boulevard",
10
+ "city": "Pasadena",
11
+ "state": "CA",
12
+ "country": "US"
13
+ },
14
+ {
15
+ "street": "364 South Lake Avenue",
16
+ "city": "Pasadena",
17
+ "state": "CA",
18
+ "country": "US"
19
+ },
20
+ {
21
+ "street": "215 South Lake Avenue",
22
+ "city": "Pasadena",
23
+ "state": "CA",
24
+ "country": "US"
25
+ },
26
+ {
27
+ "city": "Medford",
28
+ "state": "TX",
29
+ "country": "US"
30
+ }
31
+ ]