Compare commits

...

769 Commits
legacy ... main

Author SHA1 Message Date
Zhou Yuhang c5b4147132
seo: fix HTML lang attribute missing (#714) 2025-07-10 08:25:52 +08:00
Zhou Yuhang 0dad8507a8
seo: fix page has links to redirect issue (#713) 2025-07-10 08:25:42 +08:00
Zhou Yuhang 5c972e4e1d
seo: fix orphan page issues (#712) 2025-07-10 08:25:20 +08:00
Zhou Yuhang 7f39500d5d
seo: fix 3xx redirects issue (#710) 2025-07-09 11:21:58 +08:00
Zhou Yuhang e4392ca04b
seo: fix page has links to broken page issue (#709) 2025-07-09 11:20:46 +08:00
Zhou Yuhang 5cba1c5550
seo: fix page has links to redirect (#708)
Co-authored-by: Yangshun Tay <tay.yang.shun@gmail.com>
2025-07-09 11:20:10 +08:00
Zhou Yuhang ea9d14a658
seo: fix non canonical page in sitemap (#707) 2025-07-09 08:59:16 +08:00
Zhou Yuhang 983537ac2c
seo: fix page has broken image issue (#706) 2025-07-09 08:57:28 +08:00
Zhou Yuhang fa94b9dba0
seo: fix title tag missing (#705) 2025-07-09 08:57:10 +08:00
Zhou Yuhang 8b63483aa2
seo: fix canonical points to 4xx issue (#704) 2025-07-09 08:56:45 +08:00
Zhou Yuhang f11ef41686
seo: fix canonical points to redirect issue (#703) 2025-07-09 08:56:24 +08:00
Atharva 9e4909cbf7
contents/algorithms: fix incorrect time complexity for anagrams (#692)
Co-authored-by: Atharva <atharvakhadake759@gmail.com>
2025-06-06 11:01:48 +08:00
joe felix 3d61290d73
[fix] remove extra word 'the', invalid grammar. (#700) 2025-06-06 11:00:42 +08:00
Saurav Kumar f02a5fac49
fix: update the broken hyperlink for "Master the sliding window technique" on arrays (#697) 2025-04-28 08:33:05 +08:00
breeworks 2eaec04617
fix: created a margin between buttons (#693) 2025-03-26 09:52:05 +08:00
Yehia Rasheed 5dd02b1d47
[contents] update user count to 1,000,000 users (#668) 2024-10-08 19:04:00 +08:00
Minh Luu 94e3807c72
contents: add linked list implementation in C++ (#639) 2024-10-06 19:15:03 +08:00
Yehia Rasheed b2e820345c
[fix] update hyperlink for "Open a pull request!" on home page (#666) 2024-10-06 19:06:45 +08:00
Brendan Elton b60673b2c8
[content] fix typo on Self Introduction page (#632) 2024-10-06 16:45:04 +08:00
Burak Kadir Er d6a50736b0
[contents] add periods where necessary (#659)
Co-authored-by: Yangshun Tay <tay.yang.shun@gmail.com>
2024-10-06 16:43:20 +08:00
KunalBhamoriya 93b960924f
[contents] update Udemy course link (#654)
Co-authored-by: Yangshun Tay <tay.yang.shun@gmail.com>
2024-10-06 16:42:07 +08:00
Yehia Rasheed 248a953da1
[fix] Correct typo from 'access' to 'assess' in interview description (#663) (#664) 2024-10-05 18:00:26 +08:00
Yangshun 54b8796861 web: point Grind 75 to Cloudflare version 2024-09-22 11:15:52 +08:00
Yangshun 02826f04ef web: remove vercel.json 2024-09-18 11:57:31 +08:00
Yangshun 3365eda777 web: add Cloudflare redirects 2024-09-18 10:17:16 +08:00
Yangshun 5c7069049d web: add function to redirect Grind 75 path 2024-09-17 20:06:14 +08:00
Yangshun a45315e52b web: fix build for pnpm 2024-09-17 14:06:23 +08:00
Victoria Trinita 3de4780872
contents: fix typo in resume.md (#651) 2024-06-29 06:26:29 +08:00
Yangshun a6359e337b chore: merge ui package into portal 2024-06-25 09:39:16 +08:00
Yangshun a9cd10afe4 chore: move to pnpm 2024-06-25 09:32:11 +08:00
Yangshun d2fdffbace portal: update deps 2024-06-25 09:07:03 +08:00
Yangshun 167bd5e308 chore: pin turbo@1.5.6 2024-06-25 08:20:03 +08:00
cysjonathan b5e9b29b46
[resumes][fix] fix missing [add review]/[sign in to comment] buttons (#648) 2024-06-25 07:38:34 +08:00
Yangshun 0801d64457 misc 2024-06-07 16:00:10 +08:00
Stefan Mai 3bafd16c86
contents(sd): add system design in a hurry (#641)
Co-authored-by: Yangshun Tay <tay.yang.shun@gmail.com>
2024-04-29 07:21:11 +08:00
Jordan Cutler 7a0ed2a997
contents(career): update High Growth Engineer URL to new domain (#637) 2024-03-07 11:43:46 +08:00
Mark Qian c0703662ca
contents: add Codemia.io list of mock interview resource (#636) 2024-03-04 08:37:00 +08:00
Yangshun 90e56e4ea2 offers(fix): migrate to new currency exchange API 2024-03-02 07:49:32 +08:00
Alexandre Zajac f1bf1b61ec
contents(beyond): add Hungry Minds and myself to LinkedIn resources (#625)
Co-authored-by: Yangshun Tay <tay.yang.shun@gmail.com>
2023-12-04 10:17:33 +08:00
Zhu Liang efee8c7fda
contents(beyond): add 16x Engineer (#624) 2023-11-30 18:56:42 +08:00
Yangshun 497b8f6bc0 contents(beyond): complete engineering levels page 2023-11-30 15:06:26 +08:00
Yangshun d8b200091e contents(beyond): refactor section 2023-11-30 14:49:45 +08:00
Jordan Cutler 9838cea77d
contents: Add Misc > Career Growth Page (#622)
Co-authored-by: Yangshun Tay <tay.yang.shun@gmail.com>
2023-11-27 07:10:08 +08:00
Yangshun 5e5ab8f3b4 marketing: change banner to point to GFE 2023-11-03 14:28:24 +08:00
system-design 18b12a8abf
contents(sd): add System Design Newsletter (#618)
Co-authored-by: Neo Kim <hello@systemdesign.one>
2023-11-02 08:28:16 +08:00
Yangshun 11995a2c6c contents(sd): explain various types of system design interviews 2023-10-31 15:14:51 +08:00
Yangshun 2b86660310 website: prettify files 2023-10-31 15:04:19 +08:00
Yangshun 1afcc4b8c7 website: update width of star button 2023-10-31 14:56:37 +08:00
Raj Savaliya 3ef7409aaf
contents: add resume testing tips (#617)
Co-authored-by: Yangshun Tay <tay.yang.shun@gmail.com>
2023-10-27 07:04:49 +08:00
HardikBandhiya fdbec1fbc2
misc: change "Twitter" to "X (Twitter)" (#616)
Co-authored-by: Yangshun Tay <tay.yang.shun@gmail.com>
2023-10-26 06:56:38 +08:00
FIGO ed6605b476
contents: add Cover Letter section to resume page (#612)
Co-authored-by: Francisco <figo.rabo@gmail.com>
2023-10-21 19:34:34 +08:00
SwayZeee 0af108d24d
contents(queue): fix typo in queue content (#609)
Co-authored-by: Yangshun Tay <tay.yang.shun@gmail.com>
2023-09-30 10:54:03 +08:00
Dmitry Kravchenko 02a2444892
contents: style of Palantir questions is aligned with style of other questions (#605) 2023-09-30 10:50:45 +08:00
Stefan Mai d661ef5c30
[Content] Add Hello Interview to mock interviews (#610)
Co-authored-by: Yangshun Tay <tay.yang.shun@gmail.com>
2023-09-30 10:35:50 +08:00
iamtburger 5f2111af16
contents: khan academy link for binary search fixed (#604)
Co-authored-by: Tamás Bürger <tamasburger@Tamass-MBP.box>
2023-09-06 10:53:42 +08:00
Michael Sparre 9dbec74a21
contents: grammar / consistency fixes for algo sites (#599) 2023-08-03 08:25:53 +08:00
Michael Sparre 2666344b36
contents: 2 grammar fixes for linked list doc (#596) 2023-07-19 19:22:22 +08:00
ZongQi Ooi c3a287dc17
contents(algo): fix typo in algorithm/graph content (#594) 2023-07-04 16:20:56 +08:00
Aldiyar Dabarov e3a414e3ab
contents(sd): add roadmap.sh to free resource list (#593) 2023-06-20 06:33:51 +08:00
PandaNoodles418 55ba8dcf68
contents(optimize): Bullet point formatting (#588)
Co-authored-by: Panda Noodles <pandanoodles418@users.noreply.github.com>
2023-06-14 07:19:57 +08:00
PandaNoodles418 2715cb88e9
contents(star): Bullet point formatting (#587)
Co-authored-by: Panda Noodles <pandanoodles418@users.noreply.github.com>
2023-06-14 07:19:31 +08:00
Yangshun afc6e6270c blog: add post about how to have a successful swe internship 2023-05-17 09:09:48 +08:00
Yangshun b4bb08d8ee website: change nav links 2023-05-16 18:39:05 +08:00
itorest 5194d78486
contents(algo): fix url typo in sorting and searching (#586) 2023-05-11 18:21:52 +08:00
Hakan Serce cfd56cfba1
contents(algo): add Java implementation details for platform sorting algorithms (#585) 2023-05-11 18:21:02 +08:00
Hakan Serce a56d9c5c78
contents(algo): remove java.util.TreeMap from Hashtable implementations (#584) 2023-05-06 09:51:54 +08:00
Ivan 36f484632a
contents: misc update to coding-interview-rubrics.md (#583) 2023-05-06 07:47:23 +08:00
Ivan 02be66d524
contents: fix typo in coding-interview-rubrics.md (#582) 2023-05-06 07:46:52 +08:00
Phillip North fb7217cd6b
contents(sd): fix typo in Design Gurus recommendation (#579) 2023-04-19 20:11:12 +08:00
Yangshun c9ae0a2d40 website: update ads 2023-04-11 18:26:58 +08:00
jamesatmeetapro 745d81e0f8
contents(mock interview): add meetapro.com (#578)
Co-authored-by: Yangshun Tay <tay.yang.shun@gmail.com>
2023-04-11 18:09:22 +08:00
Akash Jaiswal 113e861912
contents(system design): gaurav sen system design playlist (#575) 2023-04-11 18:06:48 +08:00
Anuraag Agrawal 754f8f711b
contents: remove some stuttering when showcasing mock interview solutions (#574) 2023-04-11 18:05:50 +08:00
Mahesh Kumar be85d744ef
contents(algo): s/disjoint/disconnected (#573) 2023-02-06 08:38:09 +08:00
Yangshun Tay 3ec62e0fb1
contents(behavioral): add behavioral interview rubrics from Lior (#572) 2023-02-06 08:36:42 +08:00
Lior539 671f54959b
contents(behavioral): add more information for Behavioral Interviews (#568) 2023-02-05 17:59:06 +08:00
sid-707 f55ce5f894
contents: fix typo in behavioral interview (#570) 2023-02-05 16:46:27 +08:00
Adarsh Gupta 8113199732
contents(algo): fix typo in algorithm/geometry content (#571) 2023-02-05 16:45:31 +08:00
Anatoliy Serputov bbbbb9cad4
contents: improve self introduction explanation (#566)
Co-authored-by: Anatoliy Serputov <anatoliy@serputov.com>
Co-authored-by: Yangshun Tay <tay.yang.shun@gmail.com>
2023-01-29 07:37:44 +08:00
Samuel 85338925dc
contents(sorting): add video resources to sorting and searching (#567) 2023-01-29 07:36:08 +08:00
Yangshun 84971aa922 contents: update SG salary data for 2022 2022-12-28 08:55:14 +08:00
Yangshun 63bf35e474 portal: remove project-specific GA logging 2022-12-28 08:33:20 +08:00
Samuel 7716875cdf
contents: add links to extra resources for algorithms and data structures (#563)
Adds links to online lectures and slides from
data structures and algorithms course covering
hash tables, binary search trees, red-black trees
and b-trees.
2022-12-27 16:06:25 +08:00
Arnab Pal a2bbe6ef1a
[website][fix] fix incomplete line in resume guide (#558) 2022-11-21 19:20:01 +08:00
Denesh ce8f3c6346
[website][fix]: change LC link for Implement Stack using Queues (#557) 2022-11-21 10:19:36 +08:00
Zhang Ziqing cdfbabbe14
[offers][fix] fix redirection for non logged in users (#556) 2022-11-18 20:31:07 +08:00
Keane Chan 3e91ff2d6a
[resumes][feat] delete resume file on deletion (#555) 2022-11-18 17:17:22 +08:00
Zhang Ziqing 0e02e23015
[offers][fix] add loading and fix ci (#554)
* [offers][fix] add check for loading

* [offers][fix] remove navbar
2022-11-17 19:42:05 +08:00
Zhang Ziqing 8e53e8dd4d
[offers][feat] add admin page to navbar (#553)
* [offers][feat] add admin page to navbar

* [offers][chore] remove comments
2022-11-17 18:38:24 +08:00
Stuart Long Chay Boon 75d7132409 [offers][fix] add check if admin for list endpoint 2022-11-17 18:15:07 +08:00
Stuart Long Chay Boon 55beb386e8 [offers][feat] add admin table in db 2022-11-17 17:52:34 +08:00
Yangshun Tay ada6a68420 [offers][feat] show company logo 2022-11-10 13:59:26 +08:00
Yangshun Tay c6941c0a5a [portal][feat] add 404 page 2022-11-10 13:02:42 +08:00
Yangshun Tay 9e7f5150d6 [website][misc] make resume review portal CTA more obvious 2022-11-09 16:29:12 +08:00
Yangshun Tay 841cf3c36b [website][misc] change announcement banner 2022-11-09 16:28:53 +08:00
Yangshun Tay 7f140afb6a [portal][feat] add ranking for cities 2022-11-09 15:32:18 +08:00
Jeff Sieu 429067dfd5 [questions][ui] last minute ui changes 2022-11-09 14:07:43 +08:00
Bryann Yeap Kok Keong 91abe74fd6 [offers][fix] Remove map internship cycle script 2022-11-09 13:45:22 +08:00
Ai Ling 3ee29b1249
[offers][feat] Add positive number validation (#551) 2022-11-09 13:37:15 +08:00
Yangshun Tay 316c696b63 [portal][misc] add US companies 2022-11-09 13:17:39 +08:00
Zhang Ziqing b99c547c41
[offers][chore] fix analysis description (#550) 2022-11-09 13:13:59 +08:00
Zhang Ziqing b7d1cef759
[offers][style] fix education card style (#549) 2022-11-09 13:09:07 +08:00
Bryann Yeap Kok Keong 53fb711f9a [offers][fix] Fix seeding value for internship cycle 2022-11-09 13:07:43 +08:00
Bryann Yeap Kok Keong 00cdc2ff8c [offers][fix] Fix adding location to experience when creating offer profiles 2022-11-09 13:06:40 +08:00
Ai Ling 1db5e46fcf
[offers][fix] Fix year options (#548) 2022-11-09 13:02:32 +08:00
Bryann Yeap Kok Keong ff54652f54 [offers][fix] Add script to fix internship cycle seeded values 2022-11-09 12:53:36 +08:00
Jeff Sieu c2599d6a8c [questions][ui] move QuestionTypeBadge icon to start 2022-11-09 12:48:45 +08:00
Jeff Sieu a6fd4c4c09 [ui][badge] add startAddOn 2022-11-09 12:48:26 +08:00
Jeff Sieu 2360c07aec [questions][ui] add calendar icon to timestamp 2022-11-09 12:18:13 +08:00
Jeff Sieu 9c84b87d5a [questions][fix] update comment count after posting comment 2022-11-09 12:09:30 +08:00
Zhang Ziqing bd21b93df2
[offers][fix] display intern cycle in offer card (#547) 2022-11-09 12:00:16 +08:00
Jeff Sieu 3b965cc173 [questions][ui] fix landing dropdown being clipped 2022-11-09 11:27:19 +08:00
Jeff Sieu 3e21aabef3 [questions][fix] fix CreateListDialog layout 2022-11-09 11:02:23 +08:00
Yangshun Tay b7f5bc004c [questions][feat] update landing page 2022-11-09 10:46:40 +08:00
Yangshun Tay 65beeb87b4 [portal] clean unused code and compress images 2022-11-09 09:43:39 +08:00
Yangshun Tay 7535ce1df7 [offers][misc] make table rows shorter 2022-11-09 09:28:16 +08:00
Yangshun Tay 59994f0e45 [questions][refactor] tweak browse page 2022-11-09 09:10:38 +08:00
Yangshun Tay 7b4b120c2f [ui][dropdown] make button look like button 2022-11-09 09:09:37 +08:00
Yangshun Tay 2618784dd0 [ui][button] add aria-label prop 2022-11-09 09:05:31 +08:00
Yangshun Tay 8299a5463e
[questions][feat] tweak cards UI (#546)
* [questions][feat] tweak card UI

* [questions][feat] tweak comment and answer pages
2022-11-09 07:15:44 +08:00
hpkoh 8a73925601
Update about.tsx 2022-11-09 02:29:01 +08:00
Zhang Ziqing 3995d2d2cc
[offers][fix] add temp admin page (#544) 2022-11-09 02:04:39 +08:00
Bryann Yeap Kok Keong 93d5c4cace [offers][feat] Add admin dashboard offers api 2022-11-09 01:54:00 +08:00
Zhang Ziqing 55c23f6c0c
[offers][fix] fix redirection to offer table (#543)
* [offers][fix] fix redirection to offer table

* [offers][refactor] refactor table page
2022-11-09 01:43:14 +08:00
Ai Ling fd97f25de1
[offers][feat] Add currency detection in forms (#542)
* [offers][feat] Tweak OEA text

* [offers][feat] Add currency detection in forms
2022-11-09 00:50:38 +08:00
Zhang Ziqing 247a60efab
[offers][feat] add sortable columns to table (#541)
* [offers][feat] add sortable columns to table

* [offers][fix] fix mobile compatibility for sorter
2022-11-09 00:05:28 +08:00
Jeff Sieu 65c4254dad Merge branch 'main' of github.com:yangshun/tech-interview-handbook 2022-11-08 23:54:18 +08:00
Jeff Sieu 1135fe45b2 [questions][about] update jeff image 2022-11-08 23:54:08 +08:00
Su Yin a81364e1d9
[resumes][fix] Change default shortcut to general (#540) 2022-11-08 22:57:29 +08:00
Bryann Yeap Kok Keong 6db6c5f3c3 [offers][chore] Add sorting dashboard offers by job title 2022-11-08 22:51:48 +08:00
Bryann Yeap Kok Keong a395dcee34 [offers][chore] Add sorting dashboard offers by company name 2022-11-08 22:47:06 +08:00
Terence 237b08442e
[resumes][feat] add deletion for resumes (#539)
Co-authored-by: Terence Ho <>
2022-11-08 21:52:30 +08:00
Terence 710e67063b
[resumes][feat] delete comment (#537)
* [resumes][feat] add delete form

* [resumes][feat] add delete comment

Co-authored-by: Terence Ho <>
2022-11-08 21:52:14 +08:00
Jeff Sieu ad6d2f27e2 [questions][ui] update default location, company 2022-11-08 21:30:15 +08:00
Yangshun Tay 7dcca6a4f4 [website][contents] mention resume review portal 2022-11-08 18:57:04 +08:00
Yangshun Tay 433a2ca11a [portal][feat] add sign up link 2022-11-08 18:23:59 +08:00
Yangshun Tay c99f57260d [offers][feat] show currency depending on country 2022-11-08 17:26:49 +08:00
Keane Chan 24e68ea74a
[resumes][feat] update topUpvotedCommentCount min 2022-11-08 16:43:26 +08:00
Zhang Ziqing 9ee151342e
[offers][fix] fix numOfOtherOffers calibration (#538) 2022-11-08 16:16:37 +08:00
Terence fd2bd5862c
[resumes][chore] Update description in index (#533)
* [resumes][chore] Update description in index

* [resumes][chore] add su bio

* [resumes][chore] update keane bio

Co-authored-by: Terence Ho <>
2022-11-08 16:13:45 +08:00
Zhang Ziqing 5acda1cde9
[offers][fix] remove display of offers for 0 offers (#536) 2022-11-08 15:58:18 +08:00
Zhang Ziqing d284b2b609 [offers][feat] add display of number of offers 2022-11-08 15:37:40 +08:00
Bryann Yeap Kok Keong a47b63e7a1 [offers][chore] Add numberOfOtherOffers field for DashboardOffer 2022-11-08 15:10:30 +08:00
Peirong c1bdc53730
[resumes][feat] show all resumes when no filters selected (#535) 2022-11-08 14:26:15 +08:00
Yangshun Tay a225b9ba93 [offers][fix] improve table UX 2022-11-08 13:31:27 +08:00
Ren Weilin b0c7006a2d
[question][ui] about page (#534) 2022-11-08 12:14:50 +08:00
Zhang Ziqing 7f3a8ccf13
[offers][fix] fix padding on feature page (#532) 2022-11-08 11:54:35 +08:00
Zhang Ziqing 2d4f1fad34
[offers][fix] fix image display on feature page (#531) 2022-11-08 11:41:23 +08:00
Jeff Sieu e57c08ae16 [questions][ui] highlight filter button when filters active 2022-11-08 02:43:43 +08:00
Jeff Sieu 0ded6844ac [questions][fix] fix lists column resizing 2022-11-08 02:34:58 +08:00
Jeff Sieu 4a59732281 [questions][ui] show load more only when more than one page 2022-11-08 02:22:22 +08:00
Jeff Sieu e32c7efab2 [questions][fix] show line breaks in answers, comments 2022-11-08 02:10:21 +08:00
Jeff Sieu ebc98e85bc [questions][fix] optimise browse sort for mobile 2022-11-08 02:05:18 +08:00
hpkoh 861303016f
[questions][fix] encounter last seen sorting (#530)
Co-authored-by: Jeff Sieu <jeffsy00@gmail.com>
2022-11-08 01:58:19 +08:00
Jeff Sieu f400af76af [questions][fix] use UTC time for month and year 2022-11-08 01:51:16 +08:00
Jeff Sieu d54586fbfe [questions][fix] disallow unnamed lists 2022-11-08 01:29:15 +08:00
Jeff Sieu 964f791e46 [questions][ui] improve browse sort ui 2022-11-08 01:29:15 +08:00
Zhang Ziqing 2293b6b8c4
[offers][fix] convert education fields to display string (#529) 2022-11-07 23:26:36 +08:00
Jeff Sieu 7b044e11c3 [questions][ui] improve browse mobile ui 2022-11-07 23:08:49 +08:00
Zhang Ziqing 4a1e95a777
[offers][feat] add social media and promo video (#528) 2022-11-07 22:29:04 +08:00
Yangshun Tay 9d0721c4f9 [portal][feat] configure Next Auth's sign in route to point to custom login page 2022-11-07 19:20:57 +08:00
Ai Ling 0cdd5ac9a1
[ui][text input] Fix number input changing on scroll (#527)
* [ui][text input] Fix number input changing on scroll

* [ui][text input] Add comment
2022-11-07 19:13:14 +08:00
Yangshun Tay c1d926c6fa [portal][feat] allow changing email on settings page 2022-11-07 18:57:17 +08:00
Yangshun Tay 5b2f06fadc [portal][misc] tweak homepage hero 2022-11-07 18:29:22 +08:00
Yangshun Tay 57489d62e4 [portal][feat] add settings page 2022-11-07 18:00:05 +08:00
Zhang Ziqing d1956ca12a
[offers][feat] add header for pages (#526)
* [offers][feat] add header for pages

* [offers][fix] fix pronoun for toast

* [offers][feat] fix index page description
2022-11-07 17:34:02 +08:00
Ai Ling a79e132161
Revert "[offers][fix] Fix number input scroll issue (#524)" (#525)
This reverts commit 5d34a44237.
2022-11-07 17:17:59 +08:00
Yangshun Tay 5ecaf75270 [portal][refactor] standardize login/logout terminology 2022-11-07 17:15:52 +08:00
Ai Ling 5d34a44237
[offers][fix] Fix number input scroll issue (#524) 2022-11-07 16:35:53 +08:00
Bryann Yeap Kok Keong 31a166e6e0
[offers][refactor] Calculate overall and company analyses asychronously (#523)
* [offers][refactor] Calculate overall and company analyses asychronously

* [offers][refactor] Calculate overall and company analyses asychronously
2022-11-07 15:59:36 +08:00
Stuart Long Chay Boon 123a4cc840 [offers][fix] fix binance data 2022-11-07 15:40:50 +08:00
Yangshun Tay 3d09cf4e12 [offers][feat] show location in offers table 2022-11-07 15:35:59 +08:00
Yangshun Tay cc22f23d97 [portal][fix] fix incorrect page_view events 2022-11-07 15:16:47 +08:00
Keane Chan 3fe4f760ac
[resumes][feat] update icon image 2022-11-07 14:43:15 +08:00
hpkoh 6926aa41cd
[questions][fix] fix encounter sorting with text (#522) 2022-11-07 14:08:44 +08:00
Bryann Yeap Kok Keong bd9a30f1f8 [offers][chore] Add location field to dashboard offer 2022-11-07 13:49:29 +08:00
Bryann Yeap Kok Keong 59c836c45d [offers][chore] Add logging for seed analysis 2022-11-07 11:31:58 +08:00
Bryann Yeap Kok Keong 1dda831c54 [offers][fix] Extract seed analysis out and make it sequential 2022-11-07 11:20:27 +08:00
Yangshun Tay 373480b9e1 [offers][misc] update seed script 2022-11-07 10:17:45 +08:00
Bryann Yeap Kok Keong 5afb0506d2 [offers][refactor] Abstract generation of analysis unit into a function 2022-11-07 04:07:14 +08:00
Bryann Yeap Kok Keong 058765bf47 [offers][fix] Fix out of bounds bug when calculating analysis percentile 2022-11-07 03:34:53 +08:00
Bryann Yeap Kok Keong a421a0d98a [offers][fix] Fix analysis bug that causes percentile to go negative 2022-11-07 03:12:44 +08:00
Bryann Yeap Kok Keong cc035387d7 [offers][fix] Make analysis more accurate by omitting duplicate salary values when calculating percentiles 2022-11-07 02:51:49 +08:00
Jeff Sieu a7c9f58ef3
[questions][fix] fix upvotes (#521) 2022-11-07 01:51:22 +08:00
Jeff Sieu ffbb6a29f2 [questions][fix] remove default type when creating question 2022-11-07 01:51:33 +08:00
Bryann Yeap Kok Keong 0841e5ff76 [offers][refactor] Make companyId param optional for getting similar offers 2022-11-07 00:59:53 +08:00
Bryann Yeap Kok Keong e32341eed2 [offers][fix] Fix company offer analysis being compared to general highest offer 2022-11-07 00:49:51 +08:00
Zhang Ziqing 96b1a4c23f
[offers][fix] add info to about page (#520)
* [offers][fix] add info to about page

* [offers][feat] add feedback form
2022-11-06 18:44:11 +08:00
Jeff Sieu 6792e20f0f
[questions][fix] fix expanded typeaheads (#516) 2022-11-06 18:03:08 +08:00
Yangshun Tay c10aa15347 [portal][feat] add homepage 2022-11-06 17:17:50 +08:00
Jeff Sieu e840b3bf08
[questions][chore] add google analytics events (#513) 2022-11-06 16:40:53 +08:00
Yangshun Tay d6b03a5b46 [questions][feat] add about page 2022-11-06 16:39:46 +08:00
Yangshun Tay 5625ef3f04 [resume][feat] add team members to about page 2022-11-06 16:31:37 +08:00
Jeff Sieu e1e585df23
[questions][ui] restyle landing, question pages (#517) 2022-11-06 16:11:22 +08:00
Jeff Sieu f752264101
[questions][feat] add theory questions (#519) 2022-11-06 16:10:13 +08:00
Su Yin c2288ba69c
[resumes][feat] Add top 10 shortcut (#518) 2022-11-06 16:04:00 +08:00
Yangshun Tay ec97ee992a [offers][feat] add about page 2022-11-06 11:27:25 +08:00
Yangshun Tay d1fc6e559c [resumes][refactor] use JobTitlesTypeahead instead 2022-11-06 11:03:14 +08:00
Yangshun Tay 98465a6128 [portal][feat] pass isLoading states to typeahead components 2022-11-06 10:42:10 +08:00
Yangshun Tay be52ecc51b [ui][typeahead] add isLoading prop 2022-11-06 10:30:07 +08:00
Yangshun Tay c0e9b6c138 [resumes][refactor] use CountriesTypeahead instead 2022-11-06 10:05:13 +08:00
Yangshun Tay 79500b8a35 [portal][feat] add ranking to job titles typeahead 2022-11-06 09:33:56 +08:00
Yangshun Tay ac215dcbff [portal][feat] improve country typeahead ranking 2022-11-06 09:16:34 +08:00
Yangshun Tay 30c68afed6 [ui][typeahead] add optional minQueryLength parameter 2022-11-06 06:19:10 +08:00
Yangshun Tay 63b6a61ad3 [ui][typeahead] turn off autocomplete in typeahead to prevent unwanted suggestions 2022-11-06 06:19:09 +08:00
hpkoh d311d8dd96
[questions][feat] update threshhold for search (#515)
* [questions][feat] update text search

* [questions][feat] update threshhold for search
2022-11-06 02:40:51 +08:00
Jeff Sieu 075f7bfba8
[questions][fix] ui fixes and enhancements (#514)
Co-authored-by: wlren <weilinwork99@gmail.com>
2022-11-06 02:14:58 +08:00
hpkoh 8f4246da6d
[questions][feat] update text search (#511) 2022-11-06 01:11:51 +08:00
Keane Chan 9c18cb28e8
[resumes][fix] add migration for locationId 2022-11-05 22:01:44 +08:00
Keane Chan 1ebd32ca2f
[resumes][feat] migrate to use location db and role enum (#506)
* [resumes][feat] use role and countries typeaheads

* [resumes][feat] add location and role typeaheads

* [resumes][chore] locationId migration

* [resumes][fix] update upsert to take in locationId

* [resumes][refactor] use typeahead for browse filters

* [resumes][feat] use role and countries typeaheads

* [resumes][chore] locationId migration

* [resumes][feat] fetch location on resumes page

* [resumes][feat] enable edit resume form

* [resumes][misc] update namings and oredrings

* [resumes][feat] add default locations

* [resumes][fix] truncate title text in resume card

* [resumes][fix] filter out selected options

* [resumes][feat] add more countries to default search

* [resumes][feat] update default roles

* [resumes][chore] revert removal of value

* [resumes]feat] add default location for migration file

* [resumes][fix] fix merge conflicts

Co-authored-by: Wu Peirong <wupeirong294@gmail.com>
2022-11-05 21:56:46 +08:00
Ai Ling 9815d125ff
[offers][feat] Update feature page (#512) 2022-11-05 21:41:14 +08:00
Yangshun Tay 8e15d49ad0 [portal][refactor] make comments appearance more consistent across offers and resume reviews 2022-11-05 19:25:30 +08:00
Ai Ling 2979950c19
[offers][fix] Fix form typeaheads (#509) 2022-11-05 18:27:06 +08:00
Yangshun Tay ec1487b33b [resumes][refactor] make height calculation more robust 2022-11-05 18:04:44 +08:00
Yangshun Tay 762b55db4f [resumes][refactor] tweak resume review page UI 2022-11-05 17:23:38 +08:00
Yangshun Tay 6d3c29e6c4 Revert "[resumes][refactor] tweak resume review page UI"
This reverts commit 29abea1cd9.
2022-11-05 16:28:03 +08:00
Yangshun Tay 29abea1cd9 [resumes][refactor] tweak resume review page UI 2022-11-05 16:18:46 +08:00
Yangshun Tay 849fa867b2 [portal][chore] update education field, education lebel, question type constants 2022-11-05 15:19:00 +08:00
Stuart Long Chay Boon 1ae3502b9b [offers][refactor] remove redundant print statements 2022-11-05 14:38:41 +08:00
Ai Ling 32bbb45f4e
[offers][feat] Add form validation for typeaheads (#508) 2022-11-05 14:33:44 +08:00
Stuart Long Chay Boon 35a06c1185 [offers][fix] update tiktok salary 2022-11-05 14:25:13 +08:00
Stuart Long Chay Boon 2ae41695dc [offers][fix] fix binance salary 2022-11-05 14:22:10 +08:00
Bryann Yeap Kok Keong cd4ed504df [offers][fix] Fix user's offers appearing in own top relevant offers during analysis 2022-11-05 08:10:15 +08:00
Ai Ling fec915cffa
[offers][feat] Tweak UI and add View More button to OEA (#507)
* [offers][feat] Tweak UI and minor refactoring

* [offers][feat] Add view more button to OEA
2022-11-05 00:57:09 +08:00
Yangshun Tay f4e5d2ddb1 [portal][chore] update job titles enum 2022-11-04 19:56:40 +08:00
Ai Ling 39c96f86da
[ui][button] Add rel and target properties to button (#505)
* [ui][button] Add rel and target properties to button

* [ui][fix] Remove undefined
2022-11-04 19:07:35 +08:00
Jeff Sieu ed4b438d33
[questions][chore] add google analytics id (#498)
* [questions][chore] add google analytics id

* [questions][fix] remove comment
2022-11-04 19:07:10 +08:00
Bryann Yeap Kok Keong 5e943047e2 [offers][fix] Fix bug where offers are unable to be deleted due to being referenced by analysisUnit 2022-11-04 16:48:15 +08:00
Stuart Long Chay Boon 45a906bccf [offers][fix] remove package-lock 2022-11-04 15:13:07 +08:00
Wu Peirong 9cb8ab3e15 [resumes][feat] embed marketing video 2022-11-04 14:56:18 +08:00
Stuart Long 8864a47400
[offers][feat] add script to seed salaries from tech salaries excel sheet (#501)
* [offers][feat] add file to read tech salaries sheet WIP

* [offers][chore] read from correct file while seeding

* [offers][chore] Add company seed

* [offers][feat] add data seeding code to fetch from excel

* [offers[chore] Generate analysis for seeded data

* [offers][chore] Merge main into branch

* [offers][fix] Fix incorrect name

* [offers][fix] integrate random name generator to profile seeding

* [offers][chore] Set job title in seeding

* [offers][chore] Removed specialization

* [offers][chore] Add yoe ranges for seeded data

* [offers][chore] Rename level params

* [offers][chore]normalise salaries

* [offers][fix] add checks for data.income

* [offers][chore] Allow analysis to analyse all companies in the backend

* [offers][chore] Add createdAt and updatedAt to analysis

* [offers][chore] Add company name to analysis unit

* [offers][feat] Add multiple company analysis UI

* [offers][fix] Fix bug where company analysis shows wrong company

* [offers][fix] Fix company analysis percentile calculation

* [offers][fix] Fix empty analysis

* [offers][chore] Change user relation in OffersProfile from one-to-many to many-to-many

* [offers][chore] Change location in schema

* Include City, State, and Country in profileDtoMapper params

* [offers][fix] Fix merge conflict

* [offers][chore] Change backend endpoints to new location field

* [offers][feat] integrate cityId into create profile endpoint

* [offers][feat] integrate location with update profile endpoint

* [offers][fix] update seeding issue where fulltime base is not year

* [offers][fix] update seed script to integrate with city

* [offers][feat] integrate location for offer table and profile

* [offers][chore] fix import of cities typeahead

* [offers][feat] Use city typeahead for location field

* [offers][fix] fix merge conflict

* [offers][fix] fix incorrect salary normalisation

* [offers][fix] fix base salary for fulltime

* [offers][fix] fix bonus

* [offers][chore] add console log to print status while seeding

* [offers][feat] normalise sheet to incorporate slug

* [offers][feat] read companies from salary sheet

* [offers][fix] remove prisma/companySeed.ts from tsconfig.json

* [offers][refactor] standardise seed script with question

* [resume][refactor] tweak resume submission UI

* [offers][chore] Provide more information to frontend in AnalysisUnit

* [offers][fix] fix import for salaries script

* [offers][feat] add file to read tech salaries sheet WIP

* [offers][chore] read from correct file while seeding

* [offers][chore] Add company seed

* [offers][feat] add data seeding code to fetch from excel

* [offers[chore] Generate analysis for seeded data

* [offers][chore] Merge main into branch

* [offers][fix] Fix incorrect name

* [offers][fix] integrate random name generator to profile seeding

* [offers][chore] Set job title in seeding

* [offers][chore] Removed specialization

* [offers][chore] Add yoe ranges for seeded data

* [offers][chore] Rename level params

* [offers][chore]normalise salaries

* [offers][fix] add checks for data.income

* [offers][chore] Allow analysis to analyse all companies in the backend

* [offers][feat] Add multiple company analysis UI

* [offers][fix] Fix empty analysis

* [offers][chore] Change user relation in OffersProfile from one-to-many to many-to-many

* [offers][fix] Fix merge conflict

* [offers][fix] update seeding issue where fulltime base is not year

* [offers][fix] update seed script to integrate with city

* [offers][chore] Change backend endpoints to new location field

* [offers][feat] integrate location for offer table and profile

* [offers][chore] fix import of cities typeahead

* [offers][feat] Use city typeahead for location field

* [offers][fix] fix merge conflict

* [offers][fix] fix incorrect salary normalisation

* [offers][fix] fix base salary for fulltime

* [offers][fix] fix bonus

* [offers][chore] add console log to print status while seeding

* [offers][feat] normalise sheet to incorporate slug

* [offers][feat] read companies from salary sheet

* [offers][fix] remove prisma/companySeed.ts from tsconfig.json

* [offers][refactor] standardise seed script with question

* [offers][fix] fix import for salaries script

* [offers][fix] fix merge conflicts

* [offers][feat] add file to read tech salaries sheet WIP

* [offers][chore] read from correct file while seeding

* [offers][chore] Add company seed

* [offers][feat] add data seeding code to fetch from excel

* [offers[chore] Generate analysis for seeded data

* [offers][chore] Merge main into branch

* [offers][fix] Fix incorrect name

* [offers][fix] integrate random name generator to profile seeding

* [offers][chore] Set job title in seeding

* [offers][chore] Removed specialization

* [offers][chore] Add yoe ranges for seeded data

* [offers][chore] Rename level params

* [offers][fix] add checks for data.income

* [offers][chore] Allow analysis to analyse all companies in the backend

* [offers][fix] Fix merge conflict

* [offers][fix] update seed script to integrate with city

* [offers][feat] integrate location for offer table and profile

* [offers][feat] Use city typeahead for location field

* [offers][chore] add console log to print status while seeding

* [offers][feat] normalise sheet to incorporate slug

* [offers][feat] read companies from salary sheet

* [offers][fix] remove prisma/companySeed.ts from tsconfig.json

* [offers][refactor] standardise seed script with question

* [offers][fix] fix merge conflicts

Co-authored-by: Bryann Yeap Kok Keong <bryannyeapkk@gmail.com>
Co-authored-by: Ai Ling <hong-ailing@hotmail.com>
Co-authored-by: Zhang Ziqing <zhangziqing9926@gmail.com>
Co-authored-by: Yangshun Tay <tay.yang.shun@gmail.com>
2022-11-04 14:55:00 +08:00
Bryann Yeap Kok Keong 32302e33a5 [offers][chore] Provide more information to frontend in AnalysisUnit 2022-11-04 12:54:32 +08:00
Yangshun Tay b161df0b70 [resume][refactor] tweak resume submission UI 2022-11-04 12:36:59 +08:00
Bryann Yeap Kok Keong 80fd274662
[offers][chore] Add reference to analysed offer in analysis unit (#504)
Co-authored-by: Bryann Yeap Kok Keong <bryannyeapkk@gmail.com>
2022-11-04 12:32:50 +08:00
Yangshun Tay a7b4daec21 [offers][feat] revamp comments section 2022-11-04 11:21:01 +08:00
Zhang Ziqing 5ea3aac37d
[offers][feat] add job type for dashboard cards (#503) 2022-11-04 01:57:40 +08:00
Zhang Ziqing bd73a0b7b1
[offers][feat] add query params to offer table (#502) 2022-11-03 23:53:35 +08:00
Ai Ling 70006d4115
[offers][fix] Refactor UI (#500) 2022-11-03 21:08:02 +08:00
Stuart Long Chay Boon acc9ab00e1 [offers][fix] fix change experience type edit bug 2022-11-03 20:52:21 +08:00
Yangshun Tay 5a4e4e8977 [offers][refactor] tweak comments list 2022-11-03 20:09:38 +08:00
Yangshun Tay 36541b5244 [offers][refactor] tweak profile page UI 2022-11-03 19:29:42 +08:00
Bryann Yeap Kok Keong 4b327b5132 [offers][fix] Added more robust checks to distinguish full time and interns 2022-11-03 18:04:45 +08:00
Bryann Yeap Kok Keong d708b42970 [offers][fix] Fix profile showing wrong offers after editing 2022-11-03 17:38:29 +08:00
Yangshun Tay 3605c9fa63 [offers][browse] tweak font sizes for mobile 2022-11-03 17:06:15 +08:00
Ai Ling 230b32be34
[offers][feat] Add token check and refactor UI (#499)
* [offers][fix] Fix and refactor UI

* [offers][feat] Add token check in submission results page

* [offers][refactor] Refactor text display
2022-11-03 16:24:48 +08:00
Bryann Yeap Kok Keong b3eb2f6d6b [offers][chore] Add profileId to AnalysisOffer 2022-11-03 16:13:32 +08:00
Zhang Ziqing 7e06e07df4
[offers][fix] fix profile location display (#497) 2022-11-03 15:07:28 +08:00
Wu Peirong f7d1c8d2c4 [resumes][chore] remove overflow on page components 2022-11-03 12:43:04 +08:00
Zhang Ziqing c86c77d1e0
[offers][style] fix dashboard layout (#496)
* [offers][style] fix dashboard layout

* [offers][fix] fix profile link layout
2022-11-03 12:20:51 +08:00
Bryann Yeap Kok Keong ca17ef9162 [offers][chore] Change company field in AnalysisUnit 2022-11-03 11:56:25 +08:00
Stuart Long Chay Boon 7419cb4608 [offers][fix] fix create offer bug 2022-11-03 11:06:54 +08:00
Zhang Ziqing c76607acfe
[offers][feat] add default filters and more income columns (#495)
* [offers][feat] add yoe query param and display all by default

* [offers][feat] add base bonus stocks to table and default homepage

* [offers][style] style loading spinner
2022-11-03 10:59:09 +08:00
Yangshun Tay 07b814464e [portal][ui] allow customization of spacing within MonthYearPicker 2022-11-03 07:33:01 +08:00
Yangshun Tay 5e8da6c3f8 [resumes][feat] add logo 2022-11-03 05:48:29 +08:00
Stuart Long 0c9dfd7658 [offers][feat] return base bonus stocks for dashboard 2022-11-03 01:17:10 +08:00
Bryann Yeap Kok Keong b47cfceb09 [offers][chore] Change location filter from city to country 2022-11-03 01:05:53 +08:00
Bryann Yeap Kok Keong 6881fe8bd5
[offers][chore] Make all filters optional (#493)
Co-authored-by: Bryann Yeap Kok Keong <bryannyeapkk@gmail.com>
2022-11-03 00:59:11 +08:00
Bryann Yeap Kok Keong c0615baf5c
[offers][chore] Change location fields (#491)
* [offers][chore] Change location in schema

* Include City, State, and Country in profileDtoMapper params

* [offers][chore] Change backend endpoints to new location field

* [offers][feat] integrate cityId into create profile endpoint

* [offers][feat] integrate location with update profile endpoint

* [offers][feat] integrate location for offer table and profile

* [offers][chore] fix import of cities typeahead

* [offers][feat] Use city typeahead for location field

* [offers][fix] Fix test pages

* [offers][fix] Fix ui error

* [offers][fix] Delete test pages

Co-authored-by: Bryann Yeap Kok Keong <bryannyeapkk@gmail.com>
Co-authored-by: Stuart Long Chay Boon <chayboon@gmail.com>
Co-authored-by: Zhang Ziqing <zhangziqing9926@gmail.com>
Co-authored-by: Ai Ling <hong-ailing@hotmail.com>
2022-11-02 23:20:18 +08:00
Jeff Sieu 47bc5fb154
[ui][typeahead] fix nullable prop (#492) 2022-11-02 21:35:31 +08:00
Yangshun Tay ea57743cfe [offers] tweak offer profiles UI 2022-11-02 19:23:03 +08:00
Yangshun Tay 8e08ff86f4 [portal][ui] change app shell nav structure 2022-11-02 17:33:28 +08:00
Yangshun Tay 48dccb821e [offers][refactor] tweak submit and analysis steps UI 2022-11-02 17:11:12 +08:00
Yangshun Tay 55e93102de [offers][refactor] improve offers table responsiveness 2022-11-02 16:05:53 +08:00
Stuart Long Chay Boon ab7f064734 [offers][fix] use upsert to remove id in valuation 2022-11-02 15:33:20 +08:00
Stuart Long Chay Boon c3e8490656 [offers][fix] fix unable to update BBS in offer bug and remove valuation id 2022-11-02 15:22:26 +08:00
Yangshun Tay 03b0e4d856
[offers][feat] tweak offer background submission form (#490)
* [offers][feat] tweak offer background submission form

* [offers][feat] tweak breadcrumbs
2022-11-02 12:49:57 +08:00
Zhang Ziqing 6682d81d2e
[offers][fix] fix profile page mobile compatible style (#489)
* [offers][fix] fix offer profile page mobile compatibility

* [offers][style] style profile offer card
2022-11-02 04:03:34 +08:00
Yangshun Tay 21c9d9410a
[offers][feat] tweak offer details submission form (#488) 2022-11-01 21:17:18 +08:00
Yangshun Tay 64bc8158c1
[offers][fix] tweak submit offer job type selector (#487) 2022-11-01 11:11:10 +08:00
Tay Yang Shun 1acb37939c [portal][misc] refactor typeahead props 2022-10-31 21:30:09 +08:00
Tay Yang Shun fcff0d663f [portal][misc] fix incorrect TODO 2022-10-31 20:09:49 +08:00
hpkoh 397ea3f4aa
[questions][feat] add content search (#478)
Co-authored-by: Jeff Sieu <jeffsy00@gmail.com>
2022-10-31 19:24:07 +08:00
Tay Yang Shun e7431867c2 [portal][feat] allow customization of login redirect 2022-10-31 18:53:45 +08:00
Zhang Ziqing 960ffdc8dc
[offers][fix] fix empty value (#486) 2022-10-31 18:31:18 +08:00
Yangshun Tay e8aa1c9fda
[portal][feat] custom login page (#485) 2022-10-31 18:21:49 +08:00
Jeff Sieu 2c94691b07
[questions][ui] show newlines in question post (#484) 2022-10-31 18:10:10 +08:00
Jeff Sieu 410053425c
[questions][fix] fix typeahead spasm (#483) 2022-10-31 18:09:54 +08:00
Jeff Sieu 3cc238b0ce
[questions][fix] fix landing page location params (#482) 2022-10-31 18:09:41 +08:00
Zhang Ziqing 6c53956551
[offers][fix] fix date display for single value (#481) 2022-10-31 17:47:18 +08:00
Ren Weilin d4283eb522
[questions][ui] fix contribute button (#480) 2022-10-31 17:46:30 +08:00
Zhang Ziqing 84768a1cb6
[offers][style] fix style for safari (#479) 2022-10-31 17:34:16 +08:00
Jeff Sieu fac7d6c48d
[questions][fix] fix landing page company param (#477) 2022-10-31 17:28:53 +08:00
Jeff Sieu a208435dad
[questions][fix] fix contribute dialog close (#476) 2022-10-31 16:38:56 +08:00
Bryann Yeap Kok Keong 3e0a40efeb [offers][fix] Add analysis generation file 2022-10-31 16:20:13 +08:00
Bryann Yeap Kok Keong 8f0f4e928d [offers][refactor] Move analysis generation into a util method so that seeding can use the same method 2022-10-31 16:19:36 +08:00
Tay Yang Shun 1a34bb2825 [portal] clean up cities and states data 2022-10-31 15:47:33 +08:00
Zhang Ziqing 8798958f3d
[offers][feat] integrate isSaved API (#475) 2022-10-31 15:42:51 +08:00
Stuart Long Chay Boon 0f1e46bd7e [offers][feat] add isSaved endpoint 2022-10-31 14:45:02 +08:00
Jeff Sieu 2ae9f2c618
[questions][ui] minor ui fixes (#473) 2022-10-31 14:39:54 +08:00
Bryann Yeap Kok Keong fe94c9d2da [offers][fix] Prevent user's offers from appearing in his own analysis 2022-10-31 14:37:24 +08:00
Jeff Sieu 538fa5ccf7
[questions][feat] add useProtectedCallback hook (#472) 2022-10-31 14:31:56 +08:00
Ai Ling ade6d1d88d
[offers][fix] Fix save failure message (#474) 2022-10-31 14:16:09 +08:00
hpkoh 6bfa1ff61e
[questions][feat] add encounters sorting (#458)
Co-authored-by: Bryann Yeap Kok Keong <bryannyeapkk@gmail.com>
Co-authored-by: Ai Ling <hong-ailing@hotmail.com>
Co-authored-by: Zhang Ziqing <zhangziqing9926@gmail.com>
Co-authored-by: Bryann Yeap Kok Keong <77266823+BryannYeap@users.noreply.github.com>
2022-10-31 12:56:45 +08:00
Wu Peirong 27095e3747 [resumes][chore] add GA for resumes review page 2022-10-31 12:16:29 +08:00
Bryann Yeap Kok Keong 91696571fe [offers][feat] Add multiple company analysis 2022-10-31 11:44:12 +08:00
Ren Weilin 68f3c72945
[questions][ui] Minor UI cleanup (#470)
* [questions][ui] fix no more questions overlap

* [questions][ui] remove redundent horizontal div

* [questions][ui] reduce gap
2022-10-31 11:30:28 +08:00
Zhang Ziqing 85fd874769
[offers][style] fix offer card style (#469)
* [offers][style] fix offer card style

* [offers][style] fix OEA offer card style
2022-10-31 11:12:57 +08:00
Jeff Sieu 8fdea6b5bc
[questions][feat] add similar questions check (#468)
Co-authored-by: wlren <weilinwork99@gmail.com>
2022-10-31 10:47:27 +08:00
Jeff Sieu 568b674322
[questions][fix] fix seed questions script (#467) 2022-10-31 10:47:15 +08:00
Jeff Sieu 84e0e42b4a
[questions][ui] add temporary logo (#466) 2022-10-31 10:47:06 +08:00
hpkoh 1ea1afc8a2
[questions][feat] sort answers, comments (#457)
Co-authored-by: Jeff Sieu <jeffsy00@gmail.com>
2022-10-31 02:48:56 +08:00
Zhang Ziqing e62c2ae50f
[offers][feat] add event tracking and save to profile in submisison page (#465)
* [offers][feat] add event tracking and save to profile in form

* [offers][refactor] refactor feature page

* [offers][fix] fix offer table border for action column
2022-10-31 01:58:54 +08:00
Stuart Long Chay Boon 521ade6cf0 [offers][fix] sort profiles reverse chronological order 2022-10-31 01:28:09 +08:00
Zhang Ziqing a2bf45ad56
[offers][feat] delete comment (#464)
* [offers][feat] delete comment

* [offers][style] arrange loading spinner in profile
2022-10-31 00:53:44 +08:00
Stuart Long Chay Boon bd3d1594b7 [offers][fix] fix error bug in delete comment 2022-10-31 00:34:32 +08:00
Ai Ling 1e0890b02c
[offers][fix] Fix comments UI (#463) 2022-10-31 00:10:52 +08:00
Zhang Ziqing e152de2284
[offers][feat] save to user profile (#462) 2022-10-30 23:30:24 +08:00
Ai Ling 3ecc756052
[offers][feat] Add logo (#461)
* [offers][feat] Add logo

* [offers][fix] Fix table pagination

* [offers][fix] Disable button on submit
2022-10-30 22:41:35 +08:00
Ai Ling a8fdca65cd
[offers][fix] Fix offers UI (#460) 2022-10-30 20:18:46 +08:00
hpkoh 42e990f180
[questions][feat] add text search (#456) 2022-10-30 19:51:49 +08:00
Jeff Sieu 389862feb3
[questions][ui] update roles typeahead, add sticky search bar (#451) 2022-10-30 19:32:33 +08:00
Jeff Sieu de94958ce1
[questions][chore] add questions seeding script (#450) 2022-10-30 19:32:23 +08:00
Bryann Yeap Kok Keong a459f71325 [offers][chore] Add GA tag 2022-10-30 17:45:54 +08:00
Yangshun Tay 939cbccc3f [portal][misc] fix CI error 2022-10-30 17:36:59 +08:00
Yangshun Tay ed4cea1b11 [portal][feat] add locations 2022-10-30 16:52:00 +08:00
Yangshun Tay 9492cacecf [portal] enable customization of product logo 2022-10-30 15:25:39 +08:00
Keane Chan 27fb277a98
[resumes][feat] preserve filter count when unticked 2022-10-30 13:28:21 +08:00
Wu Peirong 84710209f3 [resumes][feat] persist filter disclosure opening 2022-10-30 12:42:09 +08:00
Yangshun Tay 39b5a51aa2 [portal][fix] fix GA loading for products 2022-10-30 12:01:54 +08:00
Keane Chan 69e5610323
[resumes][fix] minor ui fixes 2022-10-30 11:38:24 +08:00
Yangshun Tay 44b3b66fbd [ui] fix outdated types 2022-10-30 11:20:03 +08:00
Terence 4ee80b9029
[resumes][feat] add ga for comments (#459)
Co-authored-by: Terence Ho <>
2022-10-30 10:55:19 +08:00
Keane Chan 0614a7ecf4
[resumes][feat] update filter count colour 2022-10-30 10:18:51 +08:00
Yangshun Tay 6746f54792 [portal][ui] allow value to be specified for comapnies and job titles typeahead 2022-10-30 10:07:38 +08:00
Keane Chan 2a4045cbcc
[resumes][fix] fix filter count bug 2022-10-30 10:03:57 +08:00
Yangshun Tay 576f0292a1 [portal][misc] s/placeHolder/placeholder 2022-10-30 10:01:54 +08:00
Yangshun Tay f7ff20bb22 [ui][typeahead] allow typeahead to be cleared 2022-10-30 09:23:03 +08:00
Stuart Long Chay Boon a103879b5c [offers][feat] add isValidToken endpoint 2022-10-30 00:18:17 +08:00
Stuart Long Chay Boon 763e8f0332 [offers][fix] fix typo of types 2022-10-29 21:51:10 +08:00
Stuart Long Chay Boon 6bed79f1fd [offers][fix] change get endpoint to query instead of mutation 2022-10-29 21:46:22 +08:00
Yangshun Tay 4d280f0846 [ui][text input] add description prop 2022-10-29 18:21:59 +08:00
Yangshun Tay 2e37e90cc8 [ui][textarea] add description prop 2022-10-29 18:21:18 +08:00
Yangshun Tay 9133ffc78d [portal] add way to clear month year picker 2022-10-29 17:37:16 +08:00
Su Yin 8dfe6b0bdd
[resumes][feat] Add dynamic filters and unreviewed shortcut (#455) 2022-10-29 17:27:05 +08:00
Ai Ling b1f16a06e9
[offers][refactor] Refactor landing page (#454) 2022-10-29 16:36:36 +08:00
Keane Chan 45d147567d
[resumes][feat] track some ga events 2022-10-29 16:36:15 +08:00
Keane Chan 0f40848a70
[resumes][chore] add GA tag 2022-10-29 16:26:27 +08:00
Keane Chan 9ef1bdca43
[resumes][chore] adjust opacity of review tab 2022-10-29 16:26:26 +08:00
Yangshun Tay b027f1cac4 Revert "[ui][text input] change pl to px for startAddOn"
This reverts commit ce906c0470.
2022-10-29 16:22:10 +08:00
Yangshun Tay 2f5e498282 [ui][badge] allow icon addon 2022-10-29 16:03:36 +08:00
Yangshun Tay 960bbcbb0a [ui][text input] set entire input bg color 2022-10-29 15:24:26 +08:00
Yangshun Tay 6eb54203bb [ui][collapsible] allow label to be react nodes 2022-10-29 14:57:24 +08:00
Bryann Yeap Kok Keong 10a049f627 [offers][fix] Fix bug where full timers when getting sorted by monthly salary instead of TC 2022-10-29 12:18:10 +08:00
Yangshun Tay 22f2f15aa4
[questions][fix] tweak question filters (#452) 2022-10-29 08:00:07 +08:00
Keane Chan d7548460e6
[resumes][feat] change tabs 2022-10-28 21:31:29 +08:00
Keane Chan 774acae664
[resumes][chore] move browse page to home (#453) 2022-10-28 20:18:04 +08:00
Yangshun Tay 766bee0e0c [ui] make disabled color more consistent 2022-10-28 19:28:34 +08:00
Yangshun Tay 720759628d
[offers][fix] tweak hero (#445)
* [portal][ui] increase font size of global elements

* [offers] tweak hero

* change some sizes

* tweak again
2022-10-28 18:37:01 +08:00
Yangshun Tay d8d4b0f092 [ui] standardize naming 2022-10-28 17:56:09 +08:00
Terence Ho 41e6c346d7 [resumes][refactor] fix about padding 2022-10-28 16:00:13 +08:00
Stuart Long Chay Boon 288a585c1a [offer][feat] add isSaved feature to get profile endpoint 2022-10-28 15:48:03 +08:00
Keane Chan 04ae318d69
[resumes][fix] remove resolved 2022-10-28 14:20:45 +08:00
Keane Chan 04e83f6732
[resumes][feat] add another threshold to make resumes reviewed 2022-10-28 12:01:43 +08:00
Keane Chan 0132b298b9
[resumes][feat] decrease opacity of reviewed resumes 2022-10-28 11:59:08 +08:00
Keane Chan 632e79e9c6
[resumes][feat] auto-resolve resume when comments >= 5 2022-10-28 11:49:40 +08:00
Keane Chan 59d4b25771
[resumes][feat] add clear filters on mobile view 2022-10-28 10:20:42 +08:00
Keane Chan ea8db4f503
[resumes][feat] add clear filter functionality 2022-10-28 10:11:58 +08:00
Yangshun Tay 9df6b52392 [ui] add textSize prop to typeahead 2022-10-28 08:07:31 +08:00
Stuart Long Chay Boon a1fc43242e [offer][feat] add remove from user profile endpoint 2022-10-28 02:25:25 +08:00
Stuart Long Chay Boon 2acf394da3 [offers][feat] add get user profile endpoint 2022-10-28 01:55:58 +08:00
Stuart Long Chay Boon 7e5300d9fc [offers][feat] create protected router to store user profile endpoints 2022-10-28 00:44:34 +08:00
Keane Chan d12f47cff5
[resumes][misc] update colours of mark as reviewed button (#449) 2022-10-27 23:00:43 +08:00
Su Yin 78609f249f
[resumes][feat] Add counts for mobile filters on browse page (#448) 2022-10-27 22:13:56 +08:00
Su Yin 45b15ac1b3
[resumes][feat] Add filter counts on browse page (#446) 2022-10-27 21:30:37 +08:00
Keane Chan f7df1f7568
[resumes][feat] use primary colored buttons 2022-10-27 17:54:32 +08:00
Yangshun Tay 58255b3c2e [ui] add Banner component 2022-10-27 17:37:07 +08:00
Terence e6538a62a5
[resumes][refactor] Update app UI (#434)
* [resumes][refactor] Update marketing page tabs

* [resumes][feat] mobile responsive resume rows on browse

* [resumes][fix] padding on pdf view in mobile

* [resumes][chore] add uni years to labels

Co-authored-by: Terence Ho <>
Co-authored-by: peirong.wu <wupeirong294@gmail.com>
2022-10-27 16:49:30 +08:00
Keane Chan 410d8712c3
[resumes][fix] add resolve resume functionality (#442)
* [resumes][fix] button getting cut off

* [resumes][feat] add resolve functionality

* [resumes][feat] replace student roles with internship

* [resumes][feat] fetch isResolved field
2022-10-27 16:08:01 +08:00
Terence e3620faafe
[resumes][refactor] redirect user to signin on vote (#443)
Co-authored-by: Terence Ho <>
2022-10-27 10:21:03 +08:00
Yangshun Tay a12686e37f [portal] add Google Analytics 2022-10-27 09:35:50 +08:00
Keane Chan 01b207e52f
[resumes][feat] use primary buttons (#441) 2022-10-27 01:28:26 +08:00
Keane Chan 635039f118
[resumes][feat] make shade thicker for comment header 2022-10-27 00:09:38 +08:00
Keane Chan c3f5315947
[resumes][feat] centralize comment header 2022-10-27 00:01:53 +08:00
Ai Ling 4bbf2b42b9
[offers][feat] Split offers submission and result pages (#430) 2022-10-26 21:17:19 +08:00
Jeff Sieu 4b835db8a2
[questions][fix] searchParam loading from localStorage (#439) 2022-10-26 21:16:10 +08:00
hpkoh 87354c6dea
[questions][chore] Refactor routers (#435)
Co-authored-by: Jeff Sieu <jeffsy00@gmail.com>
2022-10-26 19:13:28 +08:00
Jeff Sieu 87aa16929b
[questions][feat] Add question lists (#438)
Co-authored-by: wlren <weilinwork99@gmail.com>
2022-10-26 18:53:09 +08:00
hpkoh 839eb31d65
[questions][fix] remove erronous migration file (#437) 2022-10-26 18:17:12 +08:00
Terence b3d110f90f
[resumes][fix] update vote query (#436)
* [resumes][fix] update vote query

* [resumes][fix] lint issues

Co-authored-by: Terence Ho <>
2022-10-26 17:55:34 +08:00
Keane Chan 248c1e3584
[portal][ui] revert font 2022-10-26 17:47:19 +08:00
Keane Chan e277cda780
[resumes][feat] add app icon 2022-10-26 17:45:20 +08:00
Keane Chan 2e13df0955
[resumes][feat] change to mostComments 2022-10-26 17:16:20 +08:00
Stuart Long Chay Boon 0db31eb0c1 [offers][fix] fix create profile bug where experience not saved 2022-10-26 17:15:39 +08:00
Yangshun Tay f48a34e88a [portal] prettify files 2022-10-26 16:30:06 +08:00
Yangshun Tay 84c3caeb1c [portal][nav] change navbar font weights 2022-10-26 16:27:05 +08:00
Terence a7e07008b8
[resumes][feat] Add About Us page (#431)
* [resumes][feat] Add About Us page

* [resumes][fix] update header

* [resumes][chore] remove for fun

Co-authored-by: Terence Ho <>
2022-10-26 16:23:28 +08:00
Keane Chan 0ba2815fbd
[portal] change top nav bar (#433) 2022-10-26 16:23:14 +08:00
hpkoh 352f8a03ad
[questions][feat] add encounters transaction for crud (#409)
* [questions][chore] refactor question queries

* [questions][chore] destructure values from input

* [questions][feat] add sorting

* [question][fix] fix frontend

* [questions][feat] add sorting

* [questions][feat] add sorting index

* [questions][chore] push migration file

* [questions][fix] fix ci issues

* [questions][fix] fix import errors

* [questions][feat] add encounters transaction for crud

* [questions][chore] fix import

* [questions][chore] update error handling

* [questions][feat] parallelize queries

* [questions][fix] update to use corrcet client

* Update questions-question-encounter-router.ts

* Update questions-question-encounter-router.ts

Co-authored-by: Jeff Sieu <jeffsy00@gmail.com>
2022-10-26 15:38:28 +08:00
Su Yin fa5cf0c115
[resumes][fix] Fix profile popup issue (#432) 2022-10-26 13:18:51 +08:00
Wu Peirong 05119f52fa [resumes][fix] browse ui and sort order labels 2022-10-25 18:46:17 +08:00
Peirong 199fc1a8b9
[resumes][feat] url search params (#429)
* [resumes][feat] adapt useSearchParams

* [resumes][feat] clickable button from review info tags
2022-10-25 12:08:07 +08:00
Bryann Yeap Kok Keong db19a84080 [offers][chore] Speed up fetching of dashboard offers 2022-10-25 10:40:55 +08:00
Keane Chan 000f22a50c
[resumes][feat] center text in file drop 2022-10-25 10:38:56 +08:00
hpkoh 79b62234ea
Revert "[questions][feat] add text search (#412)" (#428)
This reverts commit f70caba3f2.
2022-10-25 10:29:01 +08:00
Keane Chan 3b4cba3771
[resumes][feat] mobile responsiveness for form 2022-10-25 09:57:06 +08:00
Keane Chan de28a30028
[resumes][feat] shift badge to bottom 2022-10-25 09:40:58 +08:00
Ai Ling ef61793616
[offers][fix] Fix offers form experience section (#427) 2022-10-25 03:31:46 +08:00
hpkoh f70caba3f2
[questions][feat] add text search (#412) 2022-10-25 01:22:05 +08:00
hpkoh 7589e9b078
[questions][feat] add list crud (#393)
Co-authored-by: Jeff Sieu <jeffsy00@gmail.com>
2022-10-25 01:21:34 +08:00
Keane Chan ce906c0470
[ui][text input] change pl to px for startAddOn 2022-10-25 00:28:06 +08:00
Ai Ling f8423afe2a
[offers][fix] Fix UI and remove specialization on the backend (#426)
* [offers][fix] Remove specialization on the frontend

* [offers][fix] Rename refresh OEA button

* [offers][chore] Remove specialisation and make bonus, stocks and baseSalary optional

* [offers][fix] Fix OEA profile job title

Co-authored-by: Bryann Yeap Kok Keong <bryannyeapkk@gmail.com>
2022-10-25 00:24:44 +08:00
Keane Chan 4de0a1f681
[resumes][feat] improve badge UI 2022-10-24 23:56:38 +08:00
Keane Chan 98e422953c
[resumes][feat] add shadow to buttons 2022-10-24 23:56:37 +08:00
hpkoh c118ed59d4
[questions][fix] fix pagination off by one (#425) 2022-10-24 23:20:51 +08:00
Zhang Ziqing 0d53dab7a8
[offers][fix] fix landing page description (#424)
* [offers][fix] fix landing page width

* [offers][fix] fix landing page typo

* [offers][chore] fix British English in landing page

* [offers][chore] fix description in landing page
2022-10-24 23:18:23 +08:00
Keane Chan 64670923e1
[resumes][feat] add error message to submit form 2022-10-24 23:01:03 +08:00
Keane Chan b52f15a937
[portal][ui] add error message to checkbox input 2022-10-24 23:01:03 +08:00
hpkoh 471a28be8a
[questions][feat] pagination (#410)
* [questions][feat] pagination

* [questions][feat] update aggregated data

* [questions][feat] add next cursors

* [questions][fix] fix bug

* [questions][chore] fix lint error

* [questions][chore] update cursor to support adapter

* [questions][feat] paginate browse queries

* [questions][ui] change page size to 10

* [question][refactor] clean up router code

* [questions][fix] fix type errors

* [questions][feat] add upvotes tracking

* [questions][chore] add default upovte value

Co-authored-by: Jeff Sieu <jeffsy00@gmail.com>
2022-10-24 22:56:50 +08:00
Ai Ling bf35f97961
[offers][fix] Use title typeahead, add default currency and remove specialization field (#423) 2022-10-24 22:34:28 +08:00
Keane Chan 64cd69d024
[resumes][feat] move badge to the right instead 2022-10-24 22:06:18 +08:00
Zhang Ziqing e5c2082bf2
[offers][feat] add landing page and fix comment bugs (#422)
* [offers][fix] fix create commnet and update title

* [offers][fix] update tab name

* [offers][feat] add landing page
2022-10-24 22:00:48 +08:00
Stuart Long Chay Boon c188405de0 [offers][chore] create random string generator for token 2022-10-24 21:39:49 +08:00
Stuart Long Chay Boon 3c80296253 [offers][refactor] refactor random name generator code 2022-10-24 21:27:40 +08:00
Stuart Long Chay Boon e77bb03639 [offers][chore] integrate random name generator to create profile 2022-10-24 21:09:33 +08:00
Stuart Long Chay Boon ef5892a0d6 [offers][feat] add random name generator 2022-10-24 20:56:28 +08:00
Bryann Yeap Kok Keong 65a8618e54 [offers][chore] Add a secondary sorting by monthYearReceived descending in addition to other primary sorting filters applied 2022-10-24 18:40:20 +08:00
Terence 3f6ae58374
[resumes][refactor] Update resume review page UI (#418)
* [resumes][refactor] update comments ui

* [resumes][refactor] change comment border color

* [resumes][refactor] update review ui

* [resumes][refactor] rearrange review page

* update add review button

Co-authored-by: Terence Ho <>
2022-10-24 16:02:41 +08:00
Keane Chan 70b102f87e
[resumes][fix] fix unauthenticated issue on submit form 2022-10-24 14:59:38 +08:00
Su Yin 8e50cc7313
[resumes][fix] Fix browse page scrolling UI (#421)
* Fix browse page styling comments

* [resumes][fix] Fix search issue

* [resumes][fix] Make styling changes
2022-10-24 14:52:19 +08:00
Keane Chan e64d645d36
[resumes][feat] update submit page 2022-10-24 14:30:19 +08:00
Yangshun Tay 5844c52efe [portal] add required field for companies typeahead 2022-10-24 13:15:47 +08:00
Yangshun Tay 4e0e9d0f9e [portal] add job titles typeahead 2022-10-24 13:15:31 +08:00
Yangshun Tay f25a4d4532 [misc] prettify files 2022-10-24 10:18:49 +08:00
Yangshun Tay a4e63b8a41 [portal] standardize colors 2022-10-24 10:15:03 +08:00
Yangshun Tay 82f2857667 [ui][typeahead] fix results showing below other stacked elements by adding z-index 2022-10-24 09:53:30 +08:00
Yangshun Tay d9af66152c [ui][text input] fix input add on disappearing when width is too small 2022-10-24 09:35:22 +08:00
Yangshun Tay 94f232f67c [ui] change to text-sm for some elements 2022-10-24 09:34:20 +08:00
Bryann Yeap Kok Keong 5f546f951f [offers][fix] Remove crypto coin from currencies 2022-10-24 06:18:14 +08:00
Stuart Long Chay Boon 34538919b1 [offers][fix] fix edit profile endpoint 2022-10-24 01:30:30 +08:00
Zhang Ziqing 26055d2ed0
[offers][fix] remove dark theme for table (#420) 2022-10-24 00:36:05 +08:00
Peirong b7f4cf93a0
[resumes][fix] search and pagination bugs (#419) 2022-10-23 22:37:16 +08:00
Ai Ling c3d2b4d325
[offers][feat] Add toast (#417)
* [offers][feat] Add toasts

* [offers][fix] Disable empty comments
2022-10-23 18:51:12 +08:00
Ai Ling c0f92584ef
[offers][feat] Add analysis to offers profile page (#416) 2022-10-23 18:00:36 +08:00
Keane Chan 7c63e22b3a
[resumes][feat] hide scrollbar 2022-10-23 17:49:47 +08:00
Keane Chan db32fe0f67
[resumes][feat] remove resume title, clean up submit form (#415)
* [resumes][refactor] clean up submit form

* [resumes][feat] remove resume title

* [resumes][feat] remove resume title
2022-10-23 17:07:08 +08:00
Keane Chan 7bd6b0eeac
[resumes][feat] update submit form to be more compact (#414) 2022-10-23 13:58:30 +08:00
Ai Ling 77d0714e33
[offers][fix] Refactor and fix offer analysis (#413) 2022-10-23 01:35:03 +08:00
Keane Chan 6bf1a60bbd
[resumes][feat] show pagination only when required 2022-10-23 01:01:54 +08:00
Keane Chan ce185607db
[resumes][feat] use pagination component for resume pdf 2022-10-23 01:01:54 +08:00
Keane Chan 862bb53cdb
[resumes][feat] change to most comments 2022-10-23 01:01:54 +08:00
Jeff Sieu 11aa89353f
[questions][feat] add lists ui, sorting, re-design landing page (#411)
Co-authored-by: wlren <weilinwork99@gmail.com>
2022-10-22 22:14:19 +08:00
Wu Peirong 508eea359e [resumes][chore] add screenshots to landing 2022-10-22 19:16:39 +08:00
Stuart Long Chay Boon a5bdb72890 Merge branch 'main' of https://github.com/yangshun/tech-interview-handbook 2022-10-22 17:55:27 +08:00
Stuart Long Chay Boon b0329a04f0 [offers][fix] remove compulsory tc and monthly salary for past exp 2022-10-22 17:55:14 +08:00
Yangshun Tay e55d08279b [ui] add toasts 2022-10-22 17:46:35 +08:00
Bryann Yeap Kok Keong 6948c2e4ee [offers][refactor] Rename currency exchanger file to follow camelCase 2022-10-22 16:25:26 +08:00
Bryann Yeap Kok Keong 78a7e88410 [offers][chore] Add monthYearReceived to the analysis generation API 2022-10-22 16:13:38 +08:00
hpkoh b37ce69c25
[questions][feat] update question filter (#384)
* [questions][chore] refactor question queries

* [questions][chore] destructure values from input

* [questions][feat] add sorting

* [question][fix] fix frontend

* [questions][feat] add sorting

* [questions][feat] add sorting index

* [questions][chore] push migration file

* [questions][fix] fix ci issues

* [questions][fix] fix import errors

Co-authored-by: Jeff Sieu <jeffsy00@gmail.com>
2022-10-22 14:31:29 +08:00
Bryann Yeap Kok Keong 5e6482aa2e [offers][fix] Add previous companies to analysis DTO 2022-10-22 13:44:36 +08:00
Bryann Yeap Kok Keong be594c7513 [offers][fix] Fix analysis and offers API to accommodate new fields in OffersCurrency 2022-10-22 13:24:45 +08:00
Wu Peirong bb97c4dea6 [resumes][fix] fix nouns singular/plural (s) 2022-10-22 10:23:26 +08:00
Wu Peirong b2237f97f2 [resumes][feat] add spinner to browse page 2022-10-22 10:05:15 +08:00
Bryann Yeap Kok Keong 13f40ab6ae [offers][chore] Add baseCurrency and baseValue to Valuation DTO 2022-10-22 08:01:29 +08:00
Bryann Yeap Kok Keong 2c7f349043 [offers][chore] Add a relative base value to the currency model in schema 2022-10-22 07:48:07 +08:00
Bryann Yeap Kok Keong f8d22632ec Merge branch 'main' of github.com:yangshun/tech-interview-handbook
* 'main' of github.com:yangshun/tech-interview-handbook:
  [resumes][feat] use overflow-auto instead
  [resumes][fix] invalidate fetch query on submit
  [resumes][fix] fix reply comments (#407)
2022-10-22 00:34:04 +08:00
Bryann Yeap Kok Keong b345ae0c8f [offers][refactor] Refactor the sorting to use prisma's ORDERBY api 2022-10-22 00:33:49 +08:00
Keane Chan 2414deb624
[resumes][feat] use overflow-auto instead 2022-10-22 00:09:48 +08:00
Keane Chan 7d0dba9669
[resumes][fix] invalidate fetch query on submit 2022-10-22 00:09:27 +08:00
Terence dac178e712
[resumes][fix] fix reply comments (#407)
Co-authored-by: Terence Ho <>
2022-10-21 23:14:57 +08:00
Bryann Yeap Kok Keong 2729e20351 [offers][refactor] Refactor the sorting to use prisma's WHERE api 2022-10-21 23:12:55 +08:00
Su Yin 8b8fffdab1
[resumes][feat] Add mobile filters (#408) 2022-10-21 22:18:12 +08:00
Bryann Yeap Kok Keong d200793d20 [offers][feat] Allowing showing income based on selected salary 2022-10-21 21:50:01 +08:00
Wu Peirong 587e80b1bf [resumes][fix] unauthenticated browse page show only sign-in prompt 2022-10-21 20:52:32 +08:00
Terence f123ffa7e2
[resumes][refactor] Comment UI touchup (#405)
* [resumes][refactor] add vertical line to replies

* [resumes][refactor] sort replies ascending

Co-authored-by: Terence Ho <>
2022-10-21 17:56:35 +08:00
Stuart Long Chay Boon 817f1d5705 [offers][chore] add remove offers/experience/education/specificyoe in editprofile 2022-10-21 16:28:24 +08:00
Keane Chan 35494dc7ea
[resumes][fix] fix expandable text bug 2022-10-21 15:56:50 +08:00
Terence d10377e0f9
[resumes][feat] replying comments (#401)
* [resumes][feat] add resume comment parent

* [resumes][refactor] Abstract comment edit form and votes to their components

* [resumes][feat] Add reply form

* [resumes][feat] Render replies

* [resumes][feat] add collapsible comments

* [resumes][chore] remove comment

Co-authored-by: Terence Ho <>
2022-10-21 15:55:59 +08:00
Stuart Long Chay Boon 6a665bc976 [offers][chore] remove profileName and discussion from editprofile 2022-10-21 15:46:23 +08:00
Keane Chan 18d2a10708
[resumes][feat] update top upvoted comment count 2022-10-21 15:33:07 +08:00
Keane Chan 22d5f54a47
[resumes][feat] add padding and hide scrollbar for comments (#404)
* [resumes][feat] add padding and hide scrollbar for comments

* [resumes][feat] add findUserTopUpvotedCommentCount query
2022-10-21 15:25:14 +08:00
BryannYeap fc93596c39 Return currency with income in analysis top offers 2022-10-21 13:46:36 +08:00
Keane Chan 910cc15148
[resumes][fix] fix tooltip 2022-10-21 10:17:53 +08:00
Ai Ling 11df1e1f1c
[offers][feat] Integrate offers profile edit (#403)
* [offers][fix] Fix offer analysis and save

* [offers][fix] Fix profile view page

* [offers][feat] Add offers profile edit
2022-10-21 02:19:29 +08:00
Zhang Ziqing 0adec461d0
[offers][feat] add filters for table and fix pagination (#402)
* [offers][feat] add filters for table and fix pagination

* [offers][fix] display currency
2022-10-20 23:39:07 +08:00
Wu Peirong 7c467d2e0e [resumes][feat] add helpful text when no resume shown 2022-10-20 22:35:52 +08:00
Keane Chan 4526867601
[resumes][feat] add query for max resume upvote count 2022-10-20 22:15:54 +08:00
Keane Chan 10d23fe464
[resumes][feat] add resume badges 2022-10-20 22:01:27 +08:00
Wu Peirong 89f55bc132 [resumes][feat] add useDebounceValue hook 2022-10-20 21:30:15 +08:00
Keane Chan 707161380f
[resumes][feat] fix resume badge UI (#400)
* [resumes][feat] update badge icon

* [resumes][refactor] update resume badge names

* [resumes][refactor] update to title

* [resumes][fix] disable horizontal scroll in comments
2022-10-20 20:47:46 +08:00
BryannYeap 0311ee3e6a [offers][chore] Add location to experience in the back end 2022-10-20 20:02:19 +08:00
BryannYeap 111b078147 [offers][fix] Fix the sort and filter checks in list offers API 2022-10-20 19:40:26 +08:00
Wu Peirong 283333e1ee [resumes][fix] browse tabs updates on tab shift 2022-10-20 19:26:26 +08:00
Keane Chan 41d5170225
[resumes][feat] scaffold for resume badges (#399)
* [resumes][fix] reduce font size in comments

* [resumes][feat] add queries for resume badges

* [resumes][feat] add scaffold for resume badges

* [resumes][chore] remove unused query
2022-10-20 18:25:26 +08:00
BryannYeap a5c300c9b2 [offers][fix] Align the range of Junior, Mid, and Senior SWE in the backend with the frontend 2022-10-20 18:12:30 +08:00
Wu Peirong 9741bf83b9 [resumes][refactor] add staleTime to browse page queries 2022-10-20 17:54:36 +08:00
Wu Peirong 94e2b1c01e [resumes][feat] add reviewer badge icons 2022-10-20 11:05:26 +08:00
Ai Ling 992d457b8a
[offers][feat] Integrate offers analysis into offers submission (#398)
* [offers][fix] Fix minor issues in form

* [offers][fix] Use companies typeahead in form

* [offers][feat] Fix types and integrate offers analysis

* [offers][fix] Fix generate analysis API test
2022-10-20 02:46:50 +08:00
hpkoh 4fa350964f
[questions][feat] add question encounter crud (#343) 2022-10-20 00:32:42 +08:00
Keane Chan c8b1e43337
[resumes][feat] misc updates (#397)
* [resumes][feat] only load comments on initial fetch

* [resumes][feat] update dropzone for form
2022-10-19 21:56:02 +08:00
Terence cf1852a302
[resumes][feat] Update vote animation (#396)
Co-authored-by: Terence Ho <>
2022-10-19 20:28:07 +08:00
Stuart Long Chay Boon a879639b53 [offers][chore] add migration sql and change naming conventions 2022-10-19 18:47:03 +08:00
Su Yin a53c10483e
[resumes][feat] Add pagination on browse page (#388)
* [resumes][feat] Add pagination on browse page

* [resume][fix] Remove unused type
2022-10-19 18:37:41 +08:00
Terence d8213639d3
add spinner (#394)
Co-authored-by: Terence Ho <>
2022-10-19 18:14:33 +08:00
hpkoh 2f12a900e6
[questions][chore] update to use company table values (#351)
Co-authored-by: Jeff Sieu <jeffsy00@gmail.com>
2022-10-19 18:08:51 +08:00
peirong.wu 410bf290c9 [resumes][chore] disable pdf highlighting 2022-10-19 18:02:09 +08:00
Zhang Ziqing 1ed11d9787
[offers][feat] offer discussion section (#392)
* [offers][feat] add comment components

* [offers][feat] add comment reply components

* [offers][feat] offer discussion section

* [offers][chore] remove comments
2022-10-19 17:43:10 +08:00
Stuart Long Chay Boon bde445859a [offers][chore] return comments in reverse chronological order 2022-10-19 17:06:06 +08:00
Terence 22805022a9
[resumes][feat] Add resume comment upvote/downvote (#389)
* [resumes][feat] Add upvote/downvote

* [resumes][refactor] abstract comment votes fetching from comments

* [resumes][chore] remove votes from comments query

Co-authored-by: Terence Ho <>
2022-10-19 16:48:03 +08:00
hpkoh 925ba937b4
[questions][refactor]: refactor queries (#383) 2022-10-19 15:12:56 +08:00
Zhang Ziqing 3209f8ef7e
[offers][fix] fix types for list some offers (#391) 2022-10-19 14:46:45 +08:00
Zhang Ziqing bc424bee33
[offers][refactor] add types for interfaces (#390)
* [offers][chore] Create types for API responses

* [offers][fix] fix get comments bug

* [offers][fix] make offers api open to unauthenticated users

* [offers][chore] add return types to comment api

* [offers][chore] add types to get comments api

* [offers][chore] Refactor profile and analysis APIs to return defined types

* [offers][chore] Add typed response for get offers API

* [offers][chore] Changed delete offer API response

* [offers][fix] Fix type definitions for OffersCompany in types/offers

* [offers][fix] fix list some offer frontend

Co-authored-by: BryannYeap <e0543723@u.nus.edu>
Co-authored-by: Stuart Long Chay Boon <chayboon@gmail.com>
2022-10-19 14:36:38 +08:00
Terence 612bef14ad
[resumes][refactor] Change Tabs to List view (#387)
Co-authored-by: Terence Ho <>
2022-10-18 21:20:56 +08:00
Yangshun Tay 5913a52f2b [website][marketing] s/moonchaser/rora 2022-10-18 19:55:19 +08:00
Terence 25039b52de
[resumes][feat] add comment edit (#386)
* [resumes][feat] add comment edit

* [resumes][fix] use react-hook-form validation

Co-authored-by: Terence Ho <>
2022-10-18 18:45:22 +08:00
Wu Peirong c9f7b59d52 [resumes][refactor] landing page color + font 2022-10-18 14:01:25 +08:00
Keane Chan 7d1ffb9887
[resumes][fix] fix expandable text not updating 2022-10-18 10:25:23 +08:00
Keane Chan 71838f4ac7
[resumes][feat] improve UI for submit box 2022-10-18 10:12:17 +08:00
Keane Chan b885e3445f
[resumes][feat] remove updating of pdf on edit (#385)
* [resumes][feat] remove updating of pdf on edit

* [resumes][fix] remove nit
2022-10-17 19:07:19 +08:00
Wu Peirong 9f24e0bcca [resumes][feat] implement filter shortcuts 2022-10-16 17:15:33 +08:00
Wu Peirong 4d22edabd0 [resumes][refactor] standardise upload date formatting 2022-10-15 23:27:46 +08:00
Wu Peirong 966cf2e8d6 [resumes][fix] fix zoomed resume left side cut off 2022-10-15 23:14:21 +08:00
Yangshun Tay d38f997701 [ui][typeahead] add required field 2022-10-15 13:41:08 +08:00
Stuart Long Chay Boon 44f4454d96 [offers][chore] rename offers types 2022-10-15 12:51:56 +08:00
Keane Chan 0666c99151
[resumes][feat] add isStarredByUser field to Resumes (#381) 2022-10-15 12:41:38 +08:00
Stuart Long Chay Boon 495cc8360c [offers][fix] capitalise valuation 2022-10-15 12:15:19 +08:00
Keane Chan 510e3d3227
[resumes][chore] remove resumeFile state 2022-10-15 11:07:10 +08:00
Keane Chan fa13f19b4c
[resumes][feat] disable dropzone on submission 2022-10-15 10:52:30 +08:00
Keane Chan d33fea03bc
[resumes][fix] fix reloading 2022-10-15 10:39:54 +08:00
Keane Chan 50ea8ddc1f
[resumes][feat] skip upload of file if not changed (#380) 2022-10-15 10:14:06 +08:00
BryannYeap 8a4a627f80 [offers][fix] Fix offer analysis API percentile calculation 2022-10-15 08:21:01 +08:00
BryannYeap e99e580d5e [offers][feat] Add get offers analysis API 2022-10-15 08:01:13 +08:00
BryannYeap 56632892ce [offers][chore] Simplify offer analysis API response 2022-10-15 07:17:03 +08:00
BryannYeap 0edcfb7af3 [offers][fix] Fix generate analysis API by deleting analysis if exists before creating 2022-10-15 05:18:52 +08:00
BryannYeap c12c318a0b [offers][chore] Save the generate offer profile analysis into db 2022-10-15 05:04:38 +08:00
BryannYeap 490d11e249 [offers][chore] Add OffersAnalysis into database 2022-10-15 03:23:44 +08:00
Stuart Long Chay Boon 0f2f0dc64d [offers][chore] return user object in get comments 2022-10-15 01:44:22 +08:00
Keane Chan dccc68b710
[resumes][feat] add edit form functionality (#379)
* [resumes][feat] add edit form functionality

* [resumes][chore] remove comment
2022-10-15 01:35:49 +08:00
BryannYeap b7e0d8ff90 [offers][feat] Create Offer Analysis API 2022-10-14 22:15:04 +08:00
Keane Chan 7b51ee7e88
[resumes][feat] drag and drop for file upload (#378)
* [resumes][feat] drag and drop for file upload

* [resumes][chore] use .tsx instead for landing page

* [resumes][feat] use expandable text for additionalnfo

* [resumes][refactor] clean up submit form

* [resumes][fix] fix file upload error

* [feat][resumes] change button to Submit Resume

* [resumes][fix] fix expandable text
2022-10-14 21:47:05 +08:00
Su Yin ff9cffa715
[resumes][fix] Fix browse page bugs (#377)
* [resumes][fix] Update job level labels

* [resumes][fix] Fix browse page misc UI

* [resumes][feat] Add coloured star if resume is starred

* [resumes][fix] Remove unnecessary import
2022-10-14 15:42:54 +08:00
Wu Peirong f458b39f37 [resumes][fix] resumes browse navbar href 2022-10-14 13:01:08 +08:00
Peirong 1305a09b02
[resumes][fix] fix relative href redirect to wrong path (#376) 2022-10-14 10:44:45 +08:00
BryannYeap 6c41118785 [offers][chore] Add error handling to list offers API 2022-10-14 05:45:39 +08:00
Stuart Long Chay Boon 5034a4dace [offers][chore] remove commented out code 2022-10-14 03:24:02 +08:00
Stuart Long Chay Boon 1dd083e236 [offers][chore] improve crud endpoints for comments 2022-10-14 03:21:30 +08:00
Stuart Long Chay Boon 1ec0a4f20f [offers][feat] add get comments endpoint 2022-10-14 02:57:11 +08:00
Stuart Long Chay Boon 9c9f625c53 [offers][feat] add add to user profile endpoint 2022-10-14 02:14:29 +08:00
Stuart Long Chay Boon fc27afc529 [offers][chore] return user info of comments 2022-10-14 02:00:34 +08:00
Stuart Long Chay Boon 49bf414ce9 [offers][feat] add update and delete endpoints for comment 2022-10-14 01:56:22 +08:00
Stuart Long Chay Boon fa3e456271 [offers][chore] fix error messages 2022-10-14 01:23:02 +08:00
Stuart Long Chay Boon 68d0956cba [offers][feat] add edit profile endpoint 2022-10-14 00:40:40 +08:00
Peirong dbdcd4dda9
[resumes][feat] add resume landing page (#375) 2022-10-13 23:32:18 +08:00
Keane Chan 511087cf90
[resumes][feat] downloading resume in submit form 2022-10-13 23:13:24 +08:00
Keane Chan 3ce6417fd0
[resumes][feat] re-route to sign in page on submit for review, dialog on clearing submit form (#371)
* [resumes][feat] re-route to sign in page on submit for review

* [resumes][feat] add dialog on clearing submit form
2022-10-13 21:50:49 +08:00
Yangshun Tay 39702cad4b [portal] add yoe to level util 2022-10-13 20:42:32 +08:00
Peirong a6700a2bca
[resumes][feat] resumes sorting and filtering (#374)
* [resumes][fix] use spinner for laggy star

* [resumes][feat] add filtering for resumes

* [resumes][feat] add sorting of resumes
2022-10-13 17:55:15 +08:00
Terence fd67a20a2b
[resumes][fix] Fix bugs in comments section (#363)
* [resumes][fix] left-align all comments

* [resumes][fix] add comment owner OP tag

* [resumes][fix] render multi-line text in comments

* [resumes][feat] add see more/less for overflow comments

* [resumes][refactor] prefix comments section with Resume

* [resumes][refactor] Refactor routers from reviews -> comments

* [resumes][refactor] use Vote enum in ResumesCommentVote

* [resumes][refactor] add comment count to tabs

* [resumes][refactor] combine resume-card and resume-body into resume-list-item

Co-authored-by: Terence Ho <>
2022-10-13 11:57:45 +08:00
Zhang Ziqing ffd7539179
[offers][feat] add token check to profile and add company filter to table (#373)
* [offers][feat] add token check to profile, company filter to table and currency formatter

* [offers][feat] add currency formatter
2022-10-13 00:26:57 +08:00
Stuart Long Chay Boon a47c0761d2 [offers][chore] add user to replies and return error if profile not found 2022-10-13 00:23:03 +08:00
BryannYeap 29af9f692f [offers][chore] Make totalYoe compulsory in create offer profile API 2022-10-13 00:08:07 +08:00
BryannYeap d1fa6c6170 [offers][chore] Change filter field from company name to company id 2022-10-12 23:43:17 +08:00
Stuart Long Chay Boon 08fb401c57 [offers][fix] change id to profileid 2022-10-12 23:06:37 +08:00
Stuart Long Chay Boon e8ef133a88 [offers][chore] standardise input fields for delete and get profile 2022-10-12 23:03:00 +08:00
Ai Ling 9595aabccf
[offers][fix] Fix offer submission form (#372)
* [offers][fix] Fix breadcrumbs alignment

* [offers][fix] Fix field array
2022-10-12 22:36:34 +08:00
Ai Ling f179c4ef1f
[offers][feat] Enhance submit offers form (#366)
* [eslint] Replace no-shadow with typescript no-shadow

* [offers][feat] Add auto scroll to top

* [offers][feat] Add error messages for text input fields

* [offers][fix] Add warning dialogs

* [offers][fix] Auto change currency according to TC currency

* [offers][fix] Add select error messages and fix date picker labels

* [offers][fix] Fix console warnings
2022-10-12 21:30:47 +08:00
Keane Chan 596a555d78
[resumes][feat] re-route to sign-in page + prefix resume for components (#370) 2022-10-12 21:22:26 +08:00
Ai Ling 9787ff8f34
[ui][monthYearPicker] Add required props and align bottom (#369) 2022-10-12 21:14:56 +08:00
BryannYeap 335413fdcd [offers][chore] Validate edit token before allowing deletion of offer profile 2022-10-12 20:28:12 +08:00
Zhang Ziqing 0eb4f3fc5b
[offers][feat] add table loading status, refactor table (#368) 2022-10-12 19:50:41 +08:00
Zhang Ziqing 7d15aa43cf
[offers][feat] integrate profile delete API and set loading status (#367) 2022-10-12 19:12:14 +08:00
Yangshun Tay b87afb1383 [ui][select] add errorMessage and placeholder 2022-10-12 18:57:37 +08:00
Yangshun Tay c7a0c095de [ui][typeahead] tweak chevron icon and updates stories 2022-10-12 18:53:41 +08:00
Yangshun Tay 3fe24cff3a [portal][ui] allow customization of MonthYearPicker 2022-10-12 18:53:00 +08:00
Stuart Long Chay Boon ee9e2ba257 [offers][chore]remove edit token when return single profile 2022-10-12 16:15:44 +08:00
Stuart Long Chay Boon 4e2d599d4e [offers][chore] refactor isEditable code 2022-10-12 16:07:02 +08:00
BryannYeap 00896853e1 [offers][refactor] Shift test pages under a route 2022-10-12 15:47:09 +08:00
Terence daee770519
[app/portal][fix] Add tab redirection (#365)
* [app/portal][fix] Add new tab redirection to navigation items with target:_blank

* [app/portal][fix] Fix rel and typos

Co-authored-by: Terence Ho <>
2022-10-12 13:08:42 +08:00
Ai Ling d59da5d186
[offers][feat] Add plaintext breadcrumb (#364) 2022-10-12 02:26:31 +08:00
Ai Ling 9285847bb7
[offers][fix] Fix home page company filter UI (#362) 2022-10-12 00:51:24 +08:00
Ai Ling 325a2d1f7c
[ui][companies typeahead] Add isLabelHidden and placeHolder props (#361)
* [ui][companies typeahead] add isLabelHidden and placeHolder props

* [ui][companies typeahead] add isLabelHidden and placeHolder props
2022-10-11 19:53:21 +08:00
Zhang Ziqing 73e1f76570
[offers][feat] integrate profile API and offer API (#360) 2022-10-11 19:27:18 +08:00
Yangshun Tay b52db41965 [portal][ui] improve product navbar 2022-10-11 17:46:21 +08:00
Peirong a905f31b2c
[resumes][fix] fix resumes starring lag + add zoom controls (#359)
* [resumes][fix] Fix star button delay

* [resumes][feat] add zoom controls for pdf
2022-10-11 16:36:09 +08:00
Stuart Long Chay Boon 6a6c939953 [offers][fix] fix create endpoint no company bug 2022-10-11 15:25:42 +08:00
Ai Ling 4330fb5448
[offers][feat] Integrate offers create API and fix form UI (#358) 2022-10-11 15:08:44 +08:00
Stuart Long Chay Boon 34c8c7d605 [offers][chore] add editToken check for backend 2022-10-11 15:02:16 +08:00
Stuart Long Chay Boon 0822bee33b [offers][fix] modify create profile endpoint to accept optional 2022-10-11 13:15:22 +08:00
BryannYeap f88e8e8409 [offers][chore] Update migration records 2022-10-11 12:22:57 +08:00
BryannYeap d5edb6da60 [offers][feat] Add delete OfferProfile API 2022-10-11 12:19:01 +08:00
Yangshun Tay 77ad895098
[infra] add GitHub actions for linting (#357) 2022-10-11 07:43:29 +08:00
Yangshun Tay dfdd27cb85
[infra] add GitHub actions for typechecking (#356) 2022-10-11 07:27:41 +08:00
Yangshun Tay b5c930ed68 [portal] disable react query refetch on window focus 2022-10-11 06:44:29 +08:00
Stuart Long Chay Boon 6ff3842d5e [offers][feat] add get one profile endpoint 2022-10-10 23:01:54 +08:00
BryannYeap 3c90c2f7e9 [offers][chore] Add total number of offers in paging information 2022-10-10 22:43:05 +08:00
Jeff Sieu 50d3386592
[question][ui] integrate backend voting (#355)
Co-authored-by: wlren <weilinwork99@gmail.com>
2022-10-10 22:23:58 +08:00
BryannYeap 7052e8c175 [offers][fix] Fix pagination, include yoe in DTO and fix story bug 2022-10-10 22:09:38 +08:00
Stuart Long Chay Boon e6f2be64b4 [offers][fix] grant access to create offer without logging in 2022-10-10 21:01:10 +08:00
Keane Chan 43af4b7ad6
[resumes][feat] add link to resume guide (#354) 2022-10-10 20:34:53 +08:00
Bryann Yeap Kok Keong 356eeb6954
[offers][feat] Add Offers Schema, View Offer Profiles API, and Create Offer Profile API (#353)
* [offers][fix] fix merge conflicts

* [offers][chore] Create prisma schema

* [offers][feat] add create endpoint for profiles

* [offers][feature] Create list offers API with filter functionality

* [offers][fix] fix bugs create profile bugs

* [offers][fix] fix create profile bugs

* [offers][feat] Add sorting functionality to list offers

Co-authored-by: Stuart Long Chay Boon <chayboon@gmail.com>
2022-10-10 19:50:56 +08:00
Yangshun Tay f8031caa2f [ui][slide out] add className prop 2022-10-10 15:38:38 +08:00
Su Yin cc462ab6ab
[resumes][feat] Add sign in buttons on browse page (#350)
* [resumes][fix] Add gap between sections in resume list item

* [resumes][refactor] Abstract out sign in button

* [resumes][feat] Add sign in buttons on browse page
2022-10-10 14:09:01 +08:00
Ai Ling d3c0c21f1b
[offers][feat] Add offers submission, view and list pages (#348)
* [offers][feat] add offer table and profile view

* [offers][feat] add offers submission form

* [offers][style] homepage styling

* [offers][refactor] refactor types and constants

* [offers][style] style offers form

* [offers][fix] fix import error

Co-authored-by: Zhang Ziqing <zhangziqing9926@gmail.com>
2022-10-10 13:23:22 +08:00
hpkoh 85d49ad4cd
[questions][feat] add nested create encounter (#339)
Co-authored-by: Jeff Sieu <jeffsy00@gmail.com>
2022-10-10 13:08:02 +08:00
Keane Chan 2b68ea7c6a
[resumes][fix] fix textarea registration on comment form 2022-10-10 09:52:05 +08:00
Keane Chan 057f915b29
[resumes][feat] revert to storing fileURL instead 2022-10-10 09:44:57 +08:00
Keane Chan 5d0c95e085
[resumes][feat] disable inputs and buttons during form submission 2022-10-10 09:34:34 +08:00
Yangshun Tay f6bbbe6b02 [chore] attempt to fix the storybook CI build issue 2022-10-10 08:34:04 +08:00
Jeff Sieu e78160d654
[questions][feat] integrate backend (#347) 2022-10-10 08:17:01 +08:00
Yangshun Tay fecb470c99 [ui][button] add danger, warning, info variants 2022-10-10 07:17:06 +08:00
hpkoh 0335616d57
[questions][feat] add answer comment crud (#332)
Co-authored-by: Jeff Sieu <jeffsy00@gmail.com>
2022-10-10 03:46:51 +08:00
hpkoh f28332ab88
[questions][feat] add question answer crud (#331)
Co-authored-by: Jeff Sieu <jeffsy00@gmail.com>
2022-10-10 03:26:07 +08:00
hpkoh 97c4217582
[questions][feat] add question comment crud (#330) 2022-10-10 03:12:22 +08:00
Ren Weilin cf5af1a5c7
[questions][ui] Full UI for questions/answer/comment (#346)
* [questions][ui] Add DiscardDraftModal

* [questions][ui] add question draft dialog form

* [questions][ui] refactor bottom contribute bar

* [questions][ui] landing page

* [questions][ui] add similar question card

* [questions][ui] use TIH dialog for discard

* [questions][ui] add aria-hidden for select label

* [questions][ui] extract useFormRegister hook

* [questions][ui] change landing page to component

* [questions][ui] load filter from query param

* [question][chore] add constants.ts

* [questions][ui] add app logo

* [questions][ui] remove form

* [questions][ui] fix dialog closing

* [questions][chore] minor changes

* [questions][ui] radio button

* [questions][ui] add vertical scrolling

* [questions][ui] Question age url param change

* [questions][chore] refactor and add in todo

* [questions][ui] contribute card clickable

* [questions][ui] landing page github stars

* [questions][ui] edit css for question card

* [question][ui] add question detail page

* [questions][ui] remove navbar import

* [questions][ui] css changes

* [questions][ui] hide sidebar

* [questions][ui] contribute questions form ui

* [questions][ui] question page

* [questions][bug] remove button

* [questions][ui] voting button size

* [questions][chore] add dummy data, refactor

* [questions][ui] answer card

* [questions][chore] add sample data

* [questions][ui] add hover

* [questions][ui] clean up old href

* [questions][ui] add comments & commments page

* [question][feat] cache filter options to localStorage

* [questions][fix] fix index refreshing constantly

* [questions][ui] set fixed sample date

Co-authored-by: Jeff Sieu <jeffsy00@gmail.com>
2022-10-10 02:01:38 +08:00
Keane Chan c252f57bd5
[resumes][feat] Update resume top nav bar (#344)
* [resumes][feat] Update resume top nav bar

* [portal][fix] convert number to Month type
2022-10-09 22:26:23 +08:00
Keane Chan 53433787eb
[resumes][feat] add loading screens for resumes/comments (#342) 2022-10-09 20:46:24 +08:00
Yangshun Tay c196dcea32 [portal][ui] add MonthYearPicker 2022-10-09 20:26:59 +08:00
Yangshun Tay ebacebb26b [portal][ui] add companies filter 2022-10-09 19:49:16 +08:00
Keane Chan e7d08d46c8
[resumes][refactor] Package routers into folders (#341)
* [resumes][refactor] package routers into folders

* [resumes][fix] use US as value
2022-10-09 18:53:35 +08:00
Su Yin e9d12dfce7
[resumes][feat] Display location text in resume browse page (#340) 2022-10-09 18:29:52 +08:00
Yangshun Tay 7f3275b705 [ui][dialog] make isShown prop required 2022-10-09 18:07:04 +08:00
Keane Chan c3c3dfceb5
Keane/update-submit-form (#338)
* [resumes][fix] add isLoading effect on submit form

* [resumes][fix] remove useeffect on browse page
2022-10-09 17:55:06 +08:00
Yangshun Tay 90f8556f8c [ui][typeahead] implementation 2022-10-09 17:52:39 +08:00
hpkoh a26bd49a96
[questions][feat] update encounters schema (#337) 2022-10-09 17:36:02 +08:00
Keane Chan a1cd0f4e9b
[resumes][feat] add submission guidelines box (#335) 2022-10-09 17:09:24 +08:00
Su Yin 632439dad4
[resumes][refactor] Filter comments on FE (#336)
* [resumes][fix] Fix fetch id

* [resumes][refactor] Change to filtering on FE for comments

* [resumes][fix] Fix lint errors
2022-10-09 16:45:16 +08:00
hpkoh 8dc967c6ec
[questions][feat] add questions crud (#327) 2022-10-09 16:34:17 +08:00
Yangshun Tay b1d7a4e4e6 [portal][nav] hide global nav for resumes 2022-10-09 15:30:58 +08:00
Peirong dd08da88a0
[resumes][fix] add spinners and responsive UI for review + browse pages (#334) 2022-10-09 15:24:23 +08:00
Yangshun Tay 3ccea65d2a [portal][ui] make product navigation appear in mobile menu 2022-10-09 13:51:22 +08:00
Yangshun Tay 8481ab1044 [portal][ui] change app shell UI 2022-10-09 12:24:41 +08:00
Keane Chan 35d614e582
[resumes][feat] update resume file size limit 2022-10-09 12:14:57 +08:00
Su Yin e1ca8e8f78
[resumes][fix] Fix starred resumes uploader name (#333) 2022-10-09 11:35:01 +08:00
Keane Chan 384981716d
[resumes][feat] upload pdf file into file storage (#321)
* [resumes][feat] upload pdf file into file storage

* [resumes][fix] fix file upload failure

* [resumes][chore] update .env.local.example

* [resumes][fix] process file transfer over next.js

* [resumes][feat] file upload

* [resumes][chore] cleanup

* [resumes][feat] add GET method for file-storage API

* [portal[chore] Update env.example file

* [resumes][chore] cleanup

* [portal][chore] update yarn lock file
2022-10-09 10:40:22 +08:00
Yangshun Tay fbf1517901 [portal][fix] remove empty files causing compilation to fail 2022-10-09 09:24:04 +08:00
Yangshun Tay 0da41c265d [ui][checkbox list] implementation 2022-10-09 09:18:30 +08:00
Yangshun Tay 21e5e0672a [ui][radio list] remove disabled prop on radio list level 2022-10-09 09:17:27 +08:00
hpkoh a818e7d820
[questions][feat] add questions models (#323)
* [questions] [feat] add questions models

* [questions][feat] add question types

* [questions][chore] update schema naming scheme

* [questions][chore] update naming scheme

* [questions][chore] updating naming scheme

* [questions][feat] add location, role and comapny

* [questions][feat] update vote enum
2022-10-09 01:36:21 +08:00
Keane Chan bead5bff14
[resumes][feat] add required fields and use text area (#329)
* [resumes][feat] add required fields and update UI

* [resumes][refactor] use same lists
2022-10-08 23:53:22 +08:00
Su Yin 101f6c7d70
[resumes][feat] Add basic linking of pages (#328)
* [resumes][fix] Fix scrolling on upload page

* [resumes][feat] Add basic linking of pages

* [resumes][fix] Remove link to resume detail page
2022-10-08 21:50:19 +08:00
Yangshun Tay a828903299 [ui][radio list] support required, disabled and item descriptions 2022-10-08 21:20:29 +08:00
Yangshun Tay 53be75b7d5 [ui][select] support required 2022-10-08 21:20:05 +08:00
Su Yin 2f50694016
[resumes][feat] Fetch resumes for browse tabs (#326)
* [resumes][fix] Change browse list item styling

* [resumes][feat] Add protected tabs router for browse page

* [resumes][feat] Fetch all, starred and my resumes in browse page

* [resumes][fix] Fix overflow y scrolling

* [resumes][fix] Use date-fns to format upload time text
2022-10-08 20:57:04 +08:00
Ren Weilin 827550a5fd
[questions][feat] add homepage layout (#312)
* [questions][feat] add homepage layout

* [questions][fix] fix rebase errors

* [questions][fix] startAddOn for search bar

* [questions][feat] add nav bar

* [questions][chore]Remove margins

* [questions][feat] add filter section

* [questions][ui] change filter section alignment

* [questions][ui]Search bar in one row

* [questions][ui] Contribute questions dialog

* [questions][ui] wording changes

Co-authored-by: Jeff Sieu <jeffsy00@gmail.com>
2022-10-08 16:08:12 +08:00
Yangshun Tay 6c91ec2077 [ui][radio list] implementation 2022-10-08 15:11:44 +08:00
Yangshun Tay 2f13d5f009 [ui][text area] implementation 2022-10-08 11:03:04 +08:00
Terence d9880dbff1
[resumes][feat] fetch comments from database (#320)
* [resumes][feat] Add resume-comments type

* [resumes][feat] Add resume-comments type

* [resumes][feat] Filter comments

* [resumes][feat] Add comments render

* [resumes][refactor] rename variables

* [resumes][refactor] update invalidateQueries

* [resumes][refactor] Use resumeId in [resumeId].tsx

* [resumes][fix] fix invalidateQuery

Co-authored-by: Terence Ho <>
2022-10-08 00:42:27 +08:00
Su Yin b37aae2154
[resumes][feat] Fetch all resumes in browse page (#325)
* [resumes][fix] Remove BrowsePageBody component

* [resumes][feat] Add router to fetch all resumes

* [resumes][feat] Fetch all resumes in browse page

* [resumes][chore] Add todo

* [resumes][fix] Remove unnecessary updatedAt field

* [resumes][fix] Change from resumeProfile to user
2022-10-08 00:26:16 +08:00
Peirong 2e947f5fb0
[resumes][feat] Fetch resume details from database (#322)
* [resumes][feat] Add resume details router

* [resumes][feat] Change review page to dynamic routing

* [resumes][feat] Toggle resume star button

* [resumes][refactor] Revert routers to User model
2022-10-07 23:33:24 +08:00
Su Yin 5507c6a9d2
[resumes][fix] Use clsx instead of classnames function (#324) 2022-10-07 22:00:37 +08:00
Su Yin 5a1c01d8cb
[resumes][feat] Add missing browse page UI (#319)
* [resumes][chore] Edit TODO comment

* [resumes][fix] Make sort dropdown bg white

* [resumes][feat] Add missing browse page UI and cleanup
2022-10-07 16:24:29 +08:00
Terence 1146c5db40
[resumes][refactor] Change to ResumesProfile schema (#318)
* [resumes][chore] Update TODOs

* [resumes][refactor] Change to new schema

* [resumes][refactor] Change query to findUniqueOrThrow

Co-authored-by: Terence Ho <>
2022-10-07 16:09:52 +08:00
Jeff Sieu 702811bafa
[ui][collapsible] add defaultOpen prop (#314) 2022-10-07 14:32:03 +08:00
Keane Chan b2b8f3b553
[resumes][feat] add resumeprofiles model (#316)
* [resumes][feat] add resumeprofiles model

* [resumes][fix] fix typo

* [resumes][chore] update migration file
2022-10-07 14:30:27 +08:00
Terence 0933cce7b5
[resumes][feat] Add API to submit & query for resume reviews (#313)
* [resumes][feat] Add route to submit resume reviews

* [resumes][feat] Add router to query for comments

* [resumes][refactor] Change limit of upvotes query

* [resumes][chore] revert changes

* [resumes][chore] remove comment

* [resumes][chore] Use ResumesSection enum instead of hard-coded string

* [resumes][refactor] Add check for user session in comments

* [resumes][fix] fix linting issues

Co-authored-by: Terence Ho <>
2022-10-07 14:19:37 +08:00
Yangshun Tay 641a565e5c [ui][pagination] implementation 2022-10-07 10:01:34 +08:00
Yangshun Tay e0a3f4c15c [ui][horizontal divider] implementation 2022-10-07 07:28:22 +08:00
Yangshun Tay e86a7665a0 [ui][tabs] change appearance 2022-10-07 07:09:12 +08:00
Su Yin 9de6dafef1
[resume][feat] Add basic browse page (#311)
* [resume][feat] Add basic browse list item

* [resume][feat] Add filter pills

* [resume][feat] Add starting browse page

* [resume][feat] Edit resume reviews page title

* [resume][feat] Update resume reviews page

* [resume][feat] Add browse list item UI
2022-10-06 23:07:16 +08:00
Yangshun Tay 0f8ff5d349 [ui][collapsible] initial implementation 2022-10-06 20:54:10 +08:00
Terence 1441fc90af
[resumes][feat] Add Resume Review Page (#306)
* [resumes][feat] WIP: Add scaffold

* [resumes][refactor] Shift comments section to its own component

* [resumes][feat] Add resume pdf view

* [resumes][feat] Add CommentsForm

* [resumes][refactor] Refactor comments form

* [resumes][fix] Fix viewport height not set

* [resumes][feat] Add form validation

* [resumes][refactor] Remove unused CommentsSection

* [resumes][fix] Manually calculate height for pdf view instead

* [resumes][refactor] Remove @tih/ui styles.scss import

Co-authored-by: Wu Peirong <wupeirong294@gmail.com>
Co-authored-by: Terence Ho <>
2022-10-06 20:09:40 +08:00
Yangshun Tay 2906dbdc75 [ui][text input] support element add ons 2022-10-06 20:02:55 +08:00
Yangshun Tay 0062199bd6 [ui][text input] add asterisk to label for required fields 2022-10-06 18:14:57 +08:00
Keane Chan 9f61ecf9c2
[resumes][feat] submit resume mutation (#310) 2022-10-06 17:40:11 +08:00
Keane Chan 7c40353f6b
[resumes][feat] add resumes schema (#308)
* [resumes][feat] add resumes schema

* [resumes][feat] rename to ResumesSection

* [resumes][feat] update resume schema
2022-10-06 14:59:14 +08:00
Keane Chan 4d92a70321
[resumes][chore] Remove tracking of state in submit form (#309)
* [resumes][chore] remove tracking of state

* [feat][resumes] make value in Select optional

* [resumes][chore] remove default value for textinput

* [resumes][feat] use primary button for submit
2022-10-06 14:54:05 +08:00
Yangshun Tay 64c5275062 [portal][feat] add company model 2022-10-06 10:49:09 +08:00
Yangshun Tay 1df0ce35a6 [ui][select] make uncontrolled 2022-10-06 09:37:59 +08:00
Yangshun Tay 1f640fda5e [portal] fix Tailwind style ordering issue 2022-10-06 07:42:45 +08:00
Keane Chan 3a4183cd48
[resumes][feat] submit resume form (#307)
* [resumes][feat] Add submit form

* [resumes][feat] add submit and clear buttons

* chore: add react-hook-form

* [resumes][[feat] add validations for resume form
2022-10-05 21:59:20 +08:00
Yangshun Tay c98bae6e25 storybook: silence Vercel emails 2022-10-05 20:52:12 +08:00
Yangshun Tay 522feeffad storybook: tweak examples 2022-10-05 20:50:27 +08:00
Yangshun Tay 4fcf80ae2a ui: add more props to Select 2022-10-05 20:32:50 +08:00
Yangshun Tay 0a3fb2503d ui(button): s/isDisabled/disabled 2022-10-05 20:14:31 +08:00
Yangshun Tay 6e5ffb3c77 storybook: add lint command and lint files 2022-10-05 20:06:04 +08:00
Yangshun Tay 2cf660c6de storybook: add tsconfig and tsc command 2022-10-05 20:01:42 +08:00
Yangshun Tay d68018b755 ui: add more props to TextInput 2022-10-05 19:48:20 +08:00
Yangshun Tay e93cc73d51 ui: add components 2022-10-04 14:23:20 +08:00
Yangshun Tay db672a2beb ui: add Alert 2022-10-04 09:30:15 +08:00
Yangshun Tay 842837fb4e storybook: add Button and Spinner examples 2022-10-04 09:04:08 +08:00
Yangshun Tay de33d38e1b ui: share tailwind config across packages 2022-10-03 20:33:35 +08:00
Paul Mureşan 5734758f96 contents: fix typo in choosing between companies (#302)
Co-authored-by: Paul Muresan <mmuresanpaul@gmail.com>
2022-10-03 08:04:03 +08:00
Yangshun Tay 02f1ce8b96 chore: scaffold directories for each project 2022-10-02 19:42:25 +08:00
Yangshun Tay e7fe80dc31 chore: make import paths consistent 2022-10-02 15:06:58 +08:00
Yangshun Tay 6d212b4561 feat: add todo example 2022-10-02 14:32:14 +08:00
Yangshun Tay 06bdab6440 chore: add prettier-plugin-tailwindcss 2022-10-01 09:36:27 +08:00
Yangshun Tay 7d9eed3b55 chore: fix README image path 2022-10-01 08:39:03 +08:00
Yangshun Tay 7f621eb8a2 website: move into monorepo 2022-10-01 08:22:46 +08:00
Yangshun Tay 0475efce3c chore: configure turbo commands 2022-10-01 08:10:43 +08:00
Yangshun Tay a5acf92139 website: add Great Front End affiliate links 2022-10-01 07:50:48 +08:00
Yangshun Tay f099cf9502 chore: silence Vercel emails for portal 2022-10-01 07:50:35 +08:00
Yangshun Tay 089625715d chore: upgrade Yarn 2022-10-01 07:43:29 +08:00
Yangshun Tay 42fd9ac886 chore: remove package-lock.json 2022-10-01 07:21:43 +08:00
Yangshun Tay ef83bcc0b2 chore: regenerate lock files 2022-10-01 07:04:08 +08:00
Yangshun Tay fa1dc71a36 chore: fix package lock 2022-09-30 08:53:29 +08:00
Yangshun Tay dee60943d0 feat: add application shell 2022-09-29 20:14:50 +08:00
Yangshun Tay 523d91f920 feat: scaffold monorepo 2022-09-29 18:21:39 +08:00
Yangshun Tay 27a82e8c0f website: change formatting 2022-09-29 16:17:07 +08:00
Yangshun Tay 598a0dc39a chore: format files 2022-09-29 14:39:40 +08:00
Yangshun Tay 4beb2ac50f chore: delete useless files 2022-09-29 13:16:39 +08:00
Pierre Marais 03303a21eb
contents: fix typo in array cheatsheet (#299) 2022-09-17 20:18:06 +08:00
Yangshun Tay 0bf2a01e8c contents: add more links to various pages 2022-09-13 11:55:34 +08:00
Yangshun Tay 9757e36b0e contents: add link to study plan 2022-09-11 10:21:52 +08:00
Yangshun Tay f062cb55c7 contents: update maximum-subarray difficulty to medium 2022-09-11 10:17:21 +08:00
Yangshun Tay 3c1ce16a22 website: add links to Front End Interview Handbook 2022-09-07 18:33:06 +08:00
Yangshun Tay 4adb491d4b website: change marketing message 2022-08-24 07:24:44 +08:00
Yangshun Tay c1fa71ad7c contents: fix typo in results for STAR behavioral section 2022-08-23 18:21:09 +08:00
Yangshun Tay 85a8ec7903 website: fix broken Tweet images 2022-08-21 11:25:22 +08:00
Jeanne Toh 8c85cec83d
website: add Jeanne Toh's success story (#294) 2022-08-13 17:54:27 +08:00
Yangshun Tay 51b44fb0d2 contents: add links to resume partners 2022-08-08 12:36:52 +08:00
Yangshun Tay 1e832774c7 website: use clsx instead of classnames 2022-08-04 10:25:06 +08:00
Yangshun Tay f2176461d5 website: update footer links 2022-08-03 08:14:38 +08:00
Rahul Senguttuvan 0a7d781fed
website: add Rahul Senguttuvan's success story (#293)
Success story from Rahul Senguttuvan ( Current Intern at Meta )
2022-08-03 07:39:48 +08:00
Yangshun Tay bfd3a95a4b website: update icons 2022-08-01 06:58:04 +08:00
Yangshun Tay ebaf817290 blog: update Zhenghao's title 2022-08-01 06:32:04 +08:00
Yangshun Tay 0209ea7ce1 algorithms: fix string split time complexity 2022-07-18 07:13:28 +08:00
Yangshun Tay 68ab7330a0 misc: update README 2022-07-17 17:57:08 +08:00
Yangshun Tay bbefdc4bf0 website: upgrade to docusaurus@2.0.0-rc-1 2022-07-15 06:54:50 +08:00
Yangshun Tay 41de7b8a19 website: add ByteByteGo 2022-07-11 13:03:13 +08:00
Yangshun Tay 2a2a803d20 website: add Discord link 2022-07-10 17:53:40 +08:00
Yangshun Tay 09fe9d55a5 blog: fix broken link 2022-07-10 12:27:35 +08:00
Yangshun Tay 76eac28a0e contents: add some links for public engineering levels 2022-07-10 12:15:34 +08:00
caramelmelmel 5d9d95271e
blog: add post "Getting a Tech Job as an Undergraduate" (#286)
* blog: new blog post

* Update 2022-07-09-important-things-for-an-undergraduate-to-know-about-getting-a-tech-job-in-a-company.md

* Rename 2022-07-09-important-things-for-an-undergraduate-to-know-about-getting-a-tech-job-in-a-company.md to 2022-07-09-getting-a-tech-job-as-an-undergraduate.md

Co-authored-by: Yangshun Tay <tay.yang.shun@gmail.com>
2022-07-10 12:12:58 +08:00
Yangshun Tay 02aa147d04 website: add legacy redirect 2022-07-04 06:06:50 +08:00
Yangshun Tay eeab673461 misc: update question groups 2022-07-03 08:15:26 +08:00
Eva Pace 1cdf44a314
contents: fix min stack difficulty (#285) 2022-07-03 07:35:08 +08:00
Yangshun Tay 6420341030 contents: misc casing fixes 2022-06-11 15:27:10 +08:00
Yangshun Tay 5d4af9dc41 contents: fix broken algo topic links 2022-06-11 15:21:20 +08:00
Yangshun Tay f2b2d6b1ae website: upgrade to docusaurus@2.0.0-beta.21 2022-06-11 14:48:25 +08:00
Yangshun Tay a6bcb0ee3e website: add Netflix success story 2022-06-11 14:13:35 +08:00
Yangshun Tay b5befc08aa misc: s/Educative/Design Gurus 2022-06-11 13:54:31 +08:00
Yangshun Tay 16d3579dae website: make docs title more readable on mobile 2022-06-11 12:38:10 +08:00
Jerome Pui b649fe019c
contents: fix typo and grammar in study cheatsheet (#279) 2022-06-04 01:22:00 +08:00
Jerome Pui 809c3ead19
contents: fix typos in hash table cheatsheet (#280)
a data structure >>> is a data structure
techniques in interviews, >>> techniques in interviews:
Add full stop for open addressing
2022-06-03 21:48:35 +08:00
Yangshun Tay c90dc49d08 website: revert banner 2022-06-02 18:28:21 +08:00
Yangshun Tay f1b4cdcd6d content: fix typo in Queue questions 2022-05-31 10:05:16 +08:00
Yangshun Tay 30efd69822 contents: update interviewer cheatsheet 2022-05-31 10:03:03 +08:00
Mueez Khan 23a7c81b6d
website: omit double "and" on home page (#278) 2022-05-28 10:27:02 +08:00
Jason Mustafa c696505835
contents(algo): fix typo in math cheat sheet (#276)
* Fix typo in math cheat sheet

* Update math.md

Co-authored-by: Yangshun Tay <tay.yang.shun@gmail.com>
2022-05-18 11:06:29 +08:00
Yangshun Tay a51384222b website: add back UA 2022-05-14 09:16:36 +08:00
Yangshun Tay df976b7a7d contents(algo): update to latest Grind 75 order 2022-05-14 08:04:20 +08:00
Yangshun Tay 016f1250b9 contents(algo): split recommended qns into essential vs practice 2022-05-14 07:56:48 +08:00
jomosz 87a923079d
contents(algo): fix typo and suggestions (#272) 2022-05-14 07:02:26 +08:00
Jason Mustafa d90f358311
contents(algo): fix typo in matrix cheat sheet (#273) 2022-05-14 07:00:43 +08:00
Yangshun Tay d9785ceeb3 misc: marketing 2022-05-13 17:24:41 +08:00
Yangshun Tay 76ebfaf9a7 blog: update experience post 2022-05-12 07:10:37 +08:00
Yangshun Tay 75c75293b1 seo: add social image 2022-05-11 10:55:47 +08:00
Yangshun Tay 5e137e236d Revert "website: add Rosa's success story"
This reverts commit 6131f64e71.
2022-05-11 07:58:21 +08:00
Yangshun Tay 8f9883530b website: add GH stars to doc page 2022-05-09 07:33:19 +08:00
Yangshun Tay 2936f03658 website: migrate to GA4 2022-05-08 20:28:33 +08:00
Yangshun Tay 6131f64e71 website: add Rosa's success story 2022-05-05 11:12:38 +08:00
Yangshun Tay 44d19cfd0e feat: add Zhenghao's blog posts 2022-05-03 11:44:03 +08:00
Yangshun Tay 4b3f845569 feat: use brand colors for product placements 2022-05-01 09:45:15 +08:00
Yangshun Tay 97c41f00c9 feat: change banner to Design Gurus 2022-05-01 08:21:10 +08:00
Yangshun Tay b412176868 contents: add links to orphaned pages 2022-04-29 17:23:44 +08:00
Yangshun Tay 5fec9d6241 blog: add resume case study 2022-04-29 17:08:21 +08:00
Yangshun Tay e7ffec6a70 contents: add back links to old articles under misc 2022-04-29 17:02:20 +08:00
Yangshun Tay d8ef797cce contents: revert questions to ask 2022-04-29 16:56:47 +08:00
Yangshun Tay e51327bbda contents: reorganize algo cheatsheet 2022-04-29 16:46:02 +08:00
Yangshun Tay 0f1b9f952a website: update typography 2022-04-29 16:34:14 +08:00
Yangshun Tay 2394d5d8f0 website: increase horizontal spacing around docs content 2022-04-29 16:28:27 +08:00
Yangshun Tay 32111902f0 contents: add promotional content within contents 2022-04-29 16:19:06 +08:00
Yangshun Tay d9ac37ff18 seo: fix reported issues 2022-04-23 18:41:08 -07:00
Yangshun Tay 546d0d5ab8 contents: fix incorrect rubrics tables 2022-04-21 10:21:50 -07:00
Dantz e67915db50
contents: std::map is not a hash-table (#269)
std::map is compare-based, the hash table in the standard library is std::unordered_map
https://en.cppreference.com/w/cpp/container/map
https://en.cppreference.com/w/cpp/container/unordered_map
2022-04-20 18:27:03 +08:00
Yangshun ef73e35d73 marketing: add IG profile 2022-04-15 18:28:52 +08:00
Yangshun 1f7566bf90 Merge branch 'master' of github.com:yangshun/tech-interview-handbook into master 2022-04-15 18:13:25 +08:00
Yangshun d74a910803 feat: improve readability 2022-04-15 18:11:49 +08:00
Yangshun b1995c9482 misc: remove old study and practice page 2022-04-15 17:53:27 +08:00
Zahid Hasan 550d8c7b45
contents: fix typo in programming languages page (#268)
Most languages let >>> Most companies let
2022-04-14 20:14:53 +08:00
Yangshun 95b2348e85 misc: update sidebar labels 2022-04-11 12:39:49 +08:00
Yangshun bd10d88632 misc: fix redirects 2022-04-10 17:13:54 +08:00
Yangshun 3b177fae95 contents: complete coding interview techniques optimization section 2022-04-10 16:47:03 +08:00
Yangshun f95b055bdd contents: rename coding interview best practices page to cheatsheet 2022-04-10 15:44:35 +08:00
Yangshun 2ab481bab0 blog: fix canonical URLs 2022-04-10 15:44:14 +08:00
Yangshun 99490862b3 contents: integrate best-practice-questions into rest of the docs 2022-04-10 12:30:07 +08:00
Yangshun 54b317849f website: update partners 2022-04-10 11:27:40 +08:00
Yangshun Tay fdc10090a7
Update coding-interview-best-practices.md 2022-04-08 20:58:30 +08:00
Yangshun a6918b297b misc: add redirects 2022-04-08 20:34:52 +08:00
Yangshun 7eccc0db17 website: add sidebar structure 2022-04-08 18:55:26 +08:00
667 changed files with 123061 additions and 13083 deletions

44
.github/workflows/lint.yml vendored Normal file
View File

@ -0,0 +1,44 @@
# Copied from https://github.com/facebook/docusaurus/blob/main/.github/workflows/lint.yml
name: Lint
on:
pull_request:
branches:
- main
concurrency:
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
cancel-in-progress: true
permissions:
contents: read
env:
DATABASE_URL: 'postgresql://postgres:password@localhost:5432/postgres'
GITHUB_CLIENT_ID: '1234'
GITHUB_CLIENT_SECRET: 'abcd'
NEXTAUTH_SECRET: 'efgh'
NEXTAUTH_URL: 'http://localhost:3000'
NODE_ENV: test
SUPABASE_ANON_KEY: 'ijkl'
SUPABASE_URL: 'https://abcd.supabase.co'
jobs:
lint:
name: Lint
timeout-minutes: 30
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Set up Node
uses: actions/setup-node@v3
with:
node-version: '16'
cache: yarn
- name: Installation
run: yarn
- name: Check immutable yarn.lock
run: git diff --exit-code
- name: Lint
run: yarn lint

37
.github/workflows/tsc.yml vendored Normal file
View File

@ -0,0 +1,37 @@
# Copied from https://github.com/facebook/docusaurus/blob/main/.github/workflows/lint.yml
name: Typecheck
on:
pull_request:
branches:
- main
concurrency:
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
cancel-in-progress: true
permissions:
contents: read
jobs:
tsc:
name: Typecheck
timeout-minutes: 30
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Set up Node
uses: actions/setup-node@v3
with:
node-version: '16'
cache: yarn
- name: Installation
run: yarn
- name: Check immutable yarn.lock
run: git diff --exit-code
# Build the shared types in dependent packages.
- name: Build dependencies
run: yarn turbo run build --filter=ui
- name: Typecheck
run: yarn tsc

23
.gitignore vendored Normal file
View File

@ -0,0 +1,23 @@
.idea
.DS_Store
node_modules
.turbo
*.log
.next
dist
dist-ssr
*.local
.env
.cache
server/dist
public/dist
.turbo
.yarn/*
!.yarn/patches
!.yarn/plugins
!.yarn/releases
!.yarn/sdks
!.yarn/versions
tsconfig.tsbuildinfo

View File

@ -1,8 +0,0 @@
tasks:
- command: gp await-port 3000 && gp preview $(gp url 3000)/tech-interview-handbook/
- before: cd website/
init: yarn install
command: yarn start
ports:
- port: 3000
onOpen: ignore

27
.prettierignore Normal file
View File

@ -0,0 +1,27 @@
node_modules
.next
build
dist
*.tsbuildinfo
*.gitignore
*.svg
*.lock
*.npmignore
*.sql
*.png
*.jpg
*.jpeg
*.gif
*.ico
*.sh
Dockerfile
Dockerfile.*
.env
.env.*
LICENSE
*.log
.DS_Store
.dockerignore
*.patch
*.toml
*.prisma

View File

@ -1,6 +1,5 @@
{
"bracketSpacing": false,
"jsxBracketSameLine": true,
"bracketSameLine": true,
"printWidth": 80,
"proseWrap": "never",
"singleQuote": true,

22
.vscode/settings.json vendored Normal file
View File

@ -0,0 +1,22 @@
{
"files.trimFinalNewlines": true,
"files.trimTrailingWhitespace": true,
"cSpell.autoFormatConfigFile": true,
"editor.formatOnPaste": true,
"editor.formatOnSave": true,
"editor.formatOnSaveMode": "file",
"javascript.format.enable": true,
"json.format.enable": true,
"eslint.format.enable": false,
"css.format.enable": true,
"css.format.newlineBetweenRules": true,
"css.format.newlineBetweenSelectors": true,
"css.format.preserveNewLines": true,
"typescript.format.enable": true,
"editor.codeActionsOnSave": {
"source.fixAll": true
},
"[prisma]": {
"editor.defaultFormatter": "Prisma.prisma"
}
}

View File

@ -2,33 +2,36 @@
<div align="center">
<a href="https://www.techinterviewhandbook.org/">
<img src="website/static/img/logo.svg" alt="Tech Interview Handbook" width="400">
<img src="assets/logo.svg" alt="Tech Interview Handbook" width="400" />
</a>
<br />
<h3>
<a href="https://www.techinterviewhandbook.org/">Read on the website</a>
</h3>
<p>
Follow us on <a href="https://facebook.com/techinterviewhandbook">Facebook</a> | <a href="https://twitter.com/techinterviewhb">Twitter</a> | <a href="https://t.me/techinterviewhandbook">Telegram</a>
Join/follow us on <a href="https://discord.com/invite/usMqNaPczq" target="_blank">Discord</a> | <a href="https://twitter.com/techinterviewhb" target="_blank">𝕏 (Twitter)</a> | <a href="https://t.me/techinterviewhandbook" target="_blank">Telegram</a> | <a href="https://facebook.com/techinterviewhandbook" target="_blank">Facebook</a>
</p>
</div>
---
<a href="https://www.techinterviewhandbook.org/software-engineering-interview-guide/" target="_blank">
<img src="assets/start-reading-button.jpg" alt="Start Reading Tech Interview Handbook" />
</a>
## What is this?
Not everyone has the time to do a few hundred LeetCode questions. Here are _free and curated_ technical interview preparation materials for busy engineers, brought to you by me, the author of the [Blind 75 list](https://www.teamblind.com/post/New-Year-Gift---Curated-List-of-Top-75-LeetCode-Questions-to-Save-Your-Time-OaM1orEU). Over 500,000 people have benefitted from this handbook!
Not everyone has the time to do a few hundred LeetCode questions. Here are _free and curated_ technical interview preparation materials for busy engineers, brought to you by me, the author of [Blind 75](https://www.teamblind.com/post/New-Year-Gift---Curated-List-of-Top-75-LeetCode-Questions-to-Save-Your-Time-OaM1orEU). Over 1,000,000 people have benefitted from this handbook!
Besides the usual algorithm questions, other **awesome** stuff includes:
- [Best practice questions](https://techinterviewhandbook.org/best-practice-questions/) for coding interviews
- [How to prepare](https://www.techinterviewhandbook.org/coding-interview/) for coding interviews
- [Coding interview cheatsheet](https://www.techinterviewhandbook.org/cheatsheet/) - Straight-to-the-point Do's and Don'ts
- [Algorithm tips](https://www.techinterviewhandbook.org/algorithms/introduction/) categorized by topic
- [Interview formats](https://www.techinterviewhandbook.org/interview-formats/) of the top tech companies
- [Step-by-step resume guide](https://www.techinterviewhandbook.org/resume/guide/) to prepare a FAANG-ready resume
- [Behavioral questions](https://www.techinterviewhandbook.org/behavioral-questions/) asked by the top tech companies
- [Good questions to ask your interviewers](https://www.techinterviewhandbook.org/questions-to-ask/) at the end of the interviews
- [Best practice questions](https://www.techinterviewhandbook.org/coding-interview-study-plan/) for coding interviews
- [Grind 75](https://www.techinterviewhandbook.org/grind75/) - the next evolution of Blind 75, bigger and better
- [How to prepare](https://www.techinterviewhandbook.org/coding-interview-prep/) for coding interviews
- [Coding interview best practices](https://www.techinterviewhandbook.org/coding-interview-cheatsheet/) - Straight-to-the-point Do's and Don'ts
- [Algorithm cheatsheets and tips](https://www.techinterviewhandbook.org/algorithms/study-cheatsheet/) categorized by topic
- [Step-by-step Software Engineer resume guide](https://www.techinterviewhandbook.org/resume/) to prepare a FAANG-ready resume
- [Behavioral questions](https://www.techinterviewhandbook.org/behavioral-interview-questions/) asked by the top tech companies
- [Front end interview preparation](https://www.frontendinterviewhandbook.com)
Help from you in contributing content would be very much appreciated!
@ -46,14 +49,16 @@ Anybody who wants to land a job at a tech company but is new to technical interv
---
<div align="center">
<h3>💡 Looking for high-quality interview courses? <a href="https://www.educative.io/explore?search_string=interview&aff=x23W">Educative</a> offers a ton of great courses to improve your interview game 💡</h3>
<h3>💡 Stop grinding mindlessly! Study coding question patterns efficiently with
<a href="https://www.designgurus.io/course/grokking-the-coding-interview?aff=kJSIoU">Grokking the Coding Interview</a> by Design Gurus 💡
</h3>
</div>
---
## How is this repository different?
There are many awesome books like [Cracking the Coding Interview](http://www.crackingthecodinginterview.com/) and interview-related repositories out there on GitHub, what makes this repository different? The difference is that many existing interview repositories contain mainly links to external resources whereas this repository contains top-quality curated content directly for your consumption.
There are many awesome books like "Cracking the Coding Interview" and interview-related repositories out there on GitHub, what makes this repository different? The difference is that many existing interview repositories contain mainly links to external resources whereas this repository contains top-quality curated content directly for your consumption.
Also, existing resources focus mainly on algorithm questions and lack coverage for more domain-specific and non-technical questions. This handbook aims to cover content beyond the typical algorithmic coding questions. 😎
@ -63,9 +68,9 @@ Also, existing resources focus mainly on algorithm questions and lack coverage f
AlgoMonster aims to help you ace the technical interview **in the shortest time possible**. By Google engineers, AlgoMonster uses a data-driven approach to teach you the most useful key question patterns and has contents to help you quickly revise basic data structures and algorithms. Best of all, AlgoMonster is not subscription-based - pay a one-time fee and get **lifetime access**. [**Join today for a 70% discount →**](https://shareasale.com/r.cfm?b=1873647&u=3114753&m=114505&urllink=&afftrack=)
### [Grokking the Coding Interview: Patterns for Coding Questions](https://www.educative.io/courses/grokking-the-coding-interview?aff=x23W)
### [Grokking the Coding Interview: Patterns for Coding Questions](https://www.designgurus.io/course/grokking-the-coding-interview?aff=kJSIoU)
This course by Educative expands upon the questions on the recommended practice questions but approaches the practicing from a questions pattern perspective, which is an approach I also agree with for learning and have personally used to get better at coding interviews. The course allows you to practice selected questions in Java, Python, C++, JavaScript and also provides sample solutions in those languages. **Learn and understand patterns, not memorize answers!** [**Join today for a 10% discount →**](https://www.educative.io/courses/grokking-the-coding-interview?aff=x23W)
This course by Design Gurus expands upon the questions on the recommended practice questions but approaches the practicing from a questions pattern perspective, which is an approach I also agree with for learning and have personally used to get better at coding interviews. The course allows you to practice selected questions in Java, Python, C++, JavaScript and also provides sample solutions in those languages. **Learn and understand patterns, not memorize answers!** [**Get lifetime access today →**](https://www.designgurus.io/course/grokking-the-coding-interview?aff=kJSIoU)
## Looking for Front End content?
@ -73,7 +78,7 @@ Front-end-related content has been moved to a separate website - [Front End Inte
## Looking for System Design content?
We're still working on System Design content. In the meanwhile, check out Educative's [Grokking the System Design Interview course](https://www.educative.io/courses/grokking-the-system-design-interview?aff=x23W), which in our opinion is one of the most useful resources for getting started on system design interviews preparation.
We're still working on System Design content. In the meanwhile, check out [ByteByteGo's System Design Interview course](https://bytebytego.com?fpr=techinterviewhandbook) or Design Gurus' [Grokking the System Design Interview course](https://www.designgurus.io/course/grokking-the-system-design-interview?aff=kJSIoU), which in our opinion are among the most useful resources for getting started on system design interviews preparation.
## Contents

View File

@ -1,5 +1,5 @@
# Algorithms
The contents have been moved to the [website](https://www.techinterviewhandbook.org/algorithms/introduction).
The contents have been moved to the [website](https://www.techinterviewhandbook.org/algorithms/study-cheatsheet).
<!-- TODO: Remove in future -->

14
apps/portal/.env.example Normal file
View File

@ -0,0 +1,14 @@
# Prisma
DATABASE_URL=postgresql://postgres:[PASSWORD]@localhost:5432/postgres
# Next Auth
NEXTAUTH_SECRET=any_string_you_wish
NEXTAUTH_URL=http://localhost:3000
# Next Auth GitHub Provider
GITHUB_CLIENT_ID=a5164b1943b5413ff2f5
GITHUB_CLIENT_SECRET=
# Supabase
SUPABASE_URL=
SUPABASE_ANON_KEY=

11
apps/portal/.eslintrc.js Normal file
View File

@ -0,0 +1,11 @@
module.exports = {
root: true,
extends: ['tih'],
parserOptions: {
tsconfigRootDir: __dirname,
project: ['./tsconfig.json'],
},
rules: {
'@typescript-eslint/ban-ts-comment': 0,
},
};

40
apps/portal/.gitignore vendored Normal file
View File

@ -0,0 +1,40 @@
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
# dependencies
/node_modules
/.pnp
.pnp.js
# testing
/coverage
# database
/prisma/db.sqlite
/prisma/db.sqlite-journal
# next.js
/.next/
/out/
# production
/build
# misc
.DS_Store
*.pem
# debug
npm-debug.log*
yarn-debug.log*
yarn-error.log*
.pnpm-debug.log*
# local env files
.env
.env*.local
# vercel
.vercel
# typescript
*.tsbuildinfo

50
apps/portal/README.md Normal file
View File

@ -0,0 +1,50 @@
# Create T3 App
This is an app bootstrapped according to the [init.tips](https://init.tips) stack, also known as the T3-Stack.
## Why are there `.js` files in here?
As per [T3-Axiom #3](https://github.com/t3-oss/create-t3-app/tree/next#3-typesafety-isnt-optional), we take typesafety as a first class citizen. Unfortunately, not all frameworks and plugins support TypeScript which means some of the configuration files have to be `.js` files.
We try to emphasize that these files are javascript for a reason, by explicitly declaring its type (`cjs` or `mjs`) depending on what's supported by the library it is used by. Also, all the `js` files in this project are still typechecked using a `@ts-check` comment at the top.
## What's next? How do I make an app with this?
We try to keep this project as simple as possible, so you can start with the most basic configuration and then move on to more advanced configuration.
If you are not familiar with the different technologies used in this project, please refer to the respective docs. If you still are in the wind, please join our [Discord](https://t3.gg/discord) and ask for help.
- [Next-Auth.js](https://next-auth.js.org)
- [Prisma](https://prisma.io)
- [TailwindCSS](https://tailwindcss.com)
- [tRPC](https://trpc.io) (using @next version? [see v10 docs here](https://trpc.io/docs/v10/))
Also checkout these awesome tutorials on `create-t3-app`.
- [Build a Blog With the T3 Stack - tRPC, TypeScript, Next.js, Prisma & Zod](https://www.youtube.com/watch?v=syEWlxVFUrY)
- [Build a Live Chat Application with the T3 Stack - TypeScript, Tailwind, tRPC](https://www.youtube.com/watch?v=dXRRY37MPuk)
- [Build a full stack app with create-t3-app](https://www.nexxel.dev/blog/ct3a-guestbook)
- [A first look at create-t3-app](https://dev.to/ajcwebdev/a-first-look-at-create-t3-app-1i8f)
## How do I deploy this?
### Vercel
We recommend deploying to [Vercel](https://vercel.com/?utm_source=t3-oss&utm_campaign=oss). It makes it super easy to deploy NextJs apps.
- Push your code to a GitHub repository.
- Go to [Vercel](https://vercel.com/?utm_source=t3-oss&utm_campaign=oss) and sign up with GitHub.
- Create a Project and import the repository you pushed your code to.
- Add your environment variables.
- Click **Deploy**
- Now whenever you push a change to your repository, Vercel will automatically redeploy your website!
### Docker
You can also dockerize this stack and deploy a container. See the [Docker deployment page](https://create-t3-app-nu.vercel.app/en/deployment/docker) for details.
## Useful resources
Here are some resources that we commonly refer to:
- [Protecting routes with Next-Auth.js](https://next-auth.js.org/configuration/nextjs#unstable_getserversession)

5
apps/portal/next-env.d.ts vendored Normal file
View File

@ -0,0 +1,5 @@
/// <reference types="next" />
/// <reference types="next/image-types/global" />
// NOTE: This file should not be edited
// see https://nextjs.org/docs/basic-features/typescript for more information.

View File

@ -0,0 +1,21 @@
import { env } from './src/env/server.mjs';
/**
* Don't be scared of the generics here.
* All they do is to give us autocompletion when using this.
*
* @template {import('next').NextConfig} T
* @param {T} config - A generic parameter that flows through to the return type
* @constraint {{import('next').NextConfig}}
*/
function defineNextConfig(config) {
return config;
}
export default defineNextConfig({
experimental: {
esmExternals: 'loose',
},
reactStrictMode: true,
swcMinify: true,
});

70
apps/portal/package.json Normal file
View File

@ -0,0 +1,70 @@
{
"name": "@tih/portal",
"version": "0.0.0",
"private": true,
"scripts": {
"dev": "next dev",
"build": "next build",
"start": "next start",
"lint": "next lint",
"tsc": "tsc",
"postinstall": "prisma generate",
"seed": "ts-node prisma/seed.ts",
"seed-salaries": "ts-node prisma/seed-salaries.ts",
"seed-analysis": "ts-node prisma/seed-analysis.ts",
"seed-questions": "ts-node prisma/seed-questions.ts",
"seed-companies": "ts-node prisma/seed-companies.ts"
},
"dependencies": {
"@headlessui/react": "^1.7.3",
"@heroicons/react": "2.0.11",
"@next-auth/prisma-adapter": "^1.0.4",
"@popperjs/core": "^2.11.6",
"@prisma/client": "^4.4.0",
"@supabase/supabase-js": "^1.35.7",
"@trpc/client": "^9.27.2",
"@trpc/next": "^9.27.2",
"@trpc/react": "^9.27.2",
"@trpc/server": "^9.27.2",
"axios": "^1.1.2",
"clsx": "^1.2.1",
"cross-fetch": "^3.1.5",
"date-fns": "^2.29.3",
"formidable": "^2.0.1",
"next": "14.2.4",
"next-auth": "~4.10.3",
"node-fetch": "^3.2.10",
"react": "18.2.0",
"react-dom": "18.2.0",
"react-dropzone": "^14.2.3",
"react-hook-form": "^7.36.1",
"react-pdf": "^5.7.2",
"react-popper": "^2.3.0",
"react-popper-tooltip": "^4.4.2",
"react-query": "^3.39.2",
"read-excel-file": "^5.5.3",
"superjson": "^1.10.0",
"unique-names-generator": "^4.7.1",
"xlsx": "^0.18.5",
"zod": "^3.18.0"
},
"devDependencies": {
"@tih/tailwind-config": "workspace:0.0.0",
"@tih/tsconfig": "workspace:0.0.0",
"@types/formidable": "^2.0.5",
"@types/node": "^18.0.0",
"@types/react": "18.0.28",
"@types/react-dom": "18.0.11",
"@types/react-pdf": "^5.7.2",
"autoprefixer": "^10.4.12",
"csv": "^6.2.2",
"postcss": "^8.4.16",
"prettier-plugin-tailwindcss": "^0.1.13",
"prisma": "^4.4.0",
"ts-node": "^10.9.1",
"typescript": "4.8.3"
},
"ct3aMetadata": {
"initVersion": "5.13.1"
}
}

View File

@ -0,0 +1,6 @@
module.exports = {
plugins: {
tailwindcss: {},
autoprefixer: {},
},
};

View File

@ -0,0 +1,265 @@
name,slug,website,logoUrl,description,finalized
3forge,3forge,3forge.com,https://logo.clearbit.com/3forge.com,,TRUE
99.co,99.co,99.co,https://logo.clearbit.com/99.co,,TRUE
"Agency for Science, Technology and Research (A*Star) Singapore",a-star-sg,a-star.edu.sg,https://logo.clearbit.com/a-star.edu.sg,,TRUE
Accenture,accenture,accenture.com,https://logo.clearbit.com/accenture.com,,TRUE
Accuracy,accuracy,accuracy.com,https://logo.clearbit.com/accuracy.com,,TRUE
Acronis,acronis,acronis.com,https://logo.clearbit.com/acronis.com,,TRUE
Agoda,agoda,agoda.com,https://logo.clearbit.com/agoda.com,,TRUE
AlphaLab Capital,alphalab-capital,alphalab.capital,https://logo.clearbit.com/alphalab.capital,,TRUE
Alstom,alstom,alstom.com,https://logo.clearbit.com/alstom.com,,TRUE
Amaris AI Pte Ltd,amaris-ai-pte-ltd,amaris.ai,https://logo.clearbit.com/amaris.ai,,TRUE
Amazon,amazon,amazon.com,https://logo.clearbit.com/amazon.com,"Amazon.com, Inc. is an American multinational technology company that focuses on e-commerce, cloud computing, digital streaming, and artificial intelligence.",TRUE
Amazon Web Services,amazon-web-services,aws.amazon.com,https://logo.clearbit.com/aws.amazon.com,,TRUE
AMD,amd,amd.com,https://logo.clearbit.com/amd.com,,TRUE
Ant Group,ant-group,antgroup.com,https://logo.clearbit.com/antgroup.com,,TRUE
Apple,apple,apple.com,https://logo.clearbit.com/apple.com,"Apple Inc. is an American multinational technology company that specializes in consumer electronics, software and online services headquartered in Cupertino, California, United States.",TRUE
Ascenda,ascenda,ascendaloyalty.com,https://logo.clearbit.com/ascendaloyalty.com,,TRUE
Atome,atome,atome.sg,https://logo.clearbit.com/atome.sg,,TRUE
Autodesk,autodesk,autodesk.com,https://logo.clearbit.com/autodesk.com,,TRUE
Avanade,avanade,avanade.com,https://logo.clearbit.com/avanade.com,,TRUE
Bank of America,bank-of-america,bankofamerica.com,https://logo.clearbit.com/bankofamerica.com,,TRUE
Bank of Singapore,bank-of-singapore,bankofsingapore.com,https://logo.clearbit.com/bankofsingapore.com,,TRUE
betterdata,betterdata,betterdata.ai,https://logo.clearbit.com/betterdata.ai,,TRUE
Binance,binance,binance.com,https://logo.clearbit.com/binance.com,,TRUE
Bosch,bosch,bosch.com,https://logo.clearbit.com/bosch.com,,TRUE
ByteDance,bytedance,bytedance.com,https://logo.clearbit.com/bytedance.com,,TRUE
Carousell,carousell,carousell.com,https://logo.clearbit.com/carousell.com,,TRUE
Carro,carro,carro.sg,https://logo.clearbit.com/carro.sg,,TRUE
Circles.Life,circles.life,circles.life,https://logo.clearbit.com/circles.life,,TRUE
Cisco,cisco,cisco.com,https://logo.clearbit.com/cisco.com,,TRUE
Citadel,citadel,citadel.com,https://logo.clearbit.com/citadel.com,,TRUE
CitiBank,citibank,citibank.com,https://logo.clearbit.com/citibank.com,,TRUE
Cloudflare,cloudflare,cloudflare.com,https://logo.clearbit.com/cloudflare.com,,TRUE
Coinhako,coinhako,coinhako.com,https://logo.clearbit.com/coinhako.com,,TRUE
ComfortDelGro,comfortdelgro,comfortdelgro.com,https://logo.clearbit.com/comfortdelgro.com,,TRUE
Constructor,constructor,constructor.io,https://logo.clearbit.com/constructor.io,,TRUE
Continental,continental,continental.com,https://logo.clearbit.com/continental.com,,TRUE
Creative,creative,creative.com,https://logo.clearbit.com/creative.com,,TRUE
Credit Agricole,credit-agricole,ca-cib.com,https://logo.clearbit.com/ca-cib.com,,TRUE
Credit Suisse,credit-suisse,credit-suisse.com,https://logo.clearbit.com/credit-suisse.com,,TRUE
Crypto.com,crypto-com,crypto.com,https://logo.clearbit.com/crypto.com,,TRUE
CSIT,csit,csit.gov.sg,https://logo.clearbit.com/csit.gov.sg,,TRUE
Daiwa Capital Markets,daiwacm,daiwacm.com,https://logo.clearbit.com/daiwacm.com,,TRUE
DBS,dbs,dbs.com,https://logo.clearbit.com/dbs.com,,TRUE
Defence Science and Technology Agency (DSTA),dsta,dsta.gov.sg,https://logo.clearbit.com/dsta.gov.sg,,TRUE
Dell,dell,dell.com,https://logo.clearbit.com/dell.com,,TRUE
Deloitte,deloitte,deloitte.com,https://logo.clearbit.com/deloitte.com,,TRUE
DHL,dhl,dhl.com,https://logo.clearbit.com/dhl.com,,TRUE
DRW,drw,drw.com,https://logo.clearbit.com/drw.com,,TRUE
DSO National Laboratories,dso-national-laboratories,www.dso.org.sg,https://logo.clearbit.com/www.dso.org.sg,,TRUE
Dyson,dyson,dyson.com,https://logo.clearbit.com/dyson.com,,TRUE
Energy Market Authority (EMA),energy-market-authority-(ema),ema.gov.sg,https://logo.clearbit.com/ema.gov.sg,,TRUE
Ensign InfoSecurity,ensign-infosecurity,ensigninfosecurity.com,https://logo.clearbit.com/ensigninfosecurity.com,,TRUE
Envision Digital,envision-digital,envision-digital.com,https://logo.clearbit.com/envision-digital.com,,TRUE
Equinix,equinix,equinix.com,https://logo.clearbit.com/equinix.com,,TRUE
Ernst and Young,ey,ey.com,https://logo.clearbit.com/ey.com,,TRUE
ExpressVPN,expressvpn,expressvpn.com,https://logo.clearbit.com/expressvpn.com,,TRUE
F5 Networks,f5,f5networks.com,https://logo.clearbit.com/f5networks.com,,TRUE
Foodpanda,foodpanda,foodpanda.com,https://logo.clearbit.com/foodpanda.com,,TRUE
Garena,garena,garena.com,https://logo.clearbit.com/garena.com,,TRUE
GIC Singapore,gic-singapore,gic.com.sg,https://logo.clearbit.com/gic.com.sg,,TRUE
GlobalFoundries,globalfoundries,globalfoundries.com,https://logo.clearbit.com/globalfoundries.com,,TRUE
Goldman Sachs,goldman-sachs,goldmansachs.com,https://logo.clearbit.com/goldmansachs.com,,TRUE
Google,google,google.com,https://logo.clearbit.com/google.com,"Google LLC is an American multinational technology company that focuses on search engine technology, online advertising, cloud computing, computer software, quantum computing, e-commerce, artificial intelligence, and consumer electronics.",TRUE
GovTech Singapore,govtech-singapore,tech.gov.sg,https://logo.clearbit.com/tech.gov.sg,,TRUE
Grab,grab,grab.com,https://logo.clearbit.com/grab.com,,TRUE
Grasshopper,grasshopper,grasshopper.com,https://logo.clearbit.com/grasshopper.com,,TRUE
Hewlett Packard (HP),hp,hp.com,https://logo.clearbit.com/hp.com,,TRUE
Hitachi Vantara,hitachi-vantara,hitachivantara.com,https://logo.clearbit.com/hitachivantara.com,,TRUE
Hodlnaut,hodlnaut,hodlnaut.com,https://logo.clearbit.com/hodlnaut.com,,TRUE
Home Team Science and Technology Agency Singapore,htx-sg,htx.gov.sg,https://logo.clearbit.com/htx.gov.sg,,TRUE
HOPE Technik,hope-technik,hopetechnik.com,https://logo.clearbit.com/hopetechnik.com,,TRUE
Housing Development Board (HDB) Singapore,hdb-sg,hdb.gov.sg,https://logo.clearbit.com/hdb.gov.sg,,TRUE
Huawei,huawei,huawei.com,https://logo.clearbit.com/huawei.com,,TRUE
Hypotenuse AI,hypotenuse-ai,hypotenuse.ai,https://logo.clearbit.com/hypotenuse.ai,,TRUE
IBM,ibm,ibm.com,https://logo.clearbit.com/ibm.com,,TRUE
IDEMIA,idemia,idemia.com,https://logo.clearbit.com/idemia.com,,TRUE
Illumina,illumina,illumina.com,https://logo.clearbit.com/illumina.com,,TRUE
Income (NTUC) Singapore,ntuc-income-sg,income.com.sg,https://logo.clearbit.com/income.com.sg,,TRUE
Indeed,indeed,indeed.com,https://logo.clearbit.com/indeed.com,,TRUE
Infineon,infineon,infineon.com,https://logo.clearbit.com/infineon.com,,TRUE
Infocomm Media Development Authority (IMDA) Singapore,imda-sg,imda.gov.sg,https://logo.clearbit.com/imda.gov.sg,,TRUE
Integrated Health Information Systems (IHIS) Singapore,ihis-sg,ihis.com.sg,https://logo.clearbit.com/ihis.com.sg,,TRUE
J.P. Morgan (JP Morgan),jp-morgan,jpmorgan.com,https://logo.clearbit.com/jpmorgan.com,,TRUE
Jane Street,jane-street,janestreet.com,https://logo.clearbit.com/janestreet.com,,TRUE
Johnson & Johnson,jnj,jnj.com,https://logo.clearbit.com/jnj.com,,TRUE
Jump Trading,jump-trading,jumptrading.com,https://logo.clearbit.com/jumptrading.com,,TRUE
KPMG,kpmg,kpmg.com,https://logo.clearbit.com/kpmg.com,,TRUE
Lazada,lazada,lazada.com,https://logo.clearbit.com/lazada.com,,TRUE
Mandiant,mandiant,mandiant.com,https://logo.clearbit.com/mandiant.com,,TRUE
Meta,meta,meta.com,https://logo.clearbit.com/meta.com,"Meta Platforms, Inc., doing business as Meta and formerly named Facebook, Inc., and TheFacebook, Inc., is an American multinational technology conglomerate based in Menlo Park, California. The company owns Facebook, Instagram, and WhatsApp, among other products and services.",TRUE
Micron,micron,micron.com,https://logo.clearbit.com/micron.com,,TRUE
Microsoft,microsoft,microsoft.com,https://logo.clearbit.com/microsoft.com,"Microsoft Corporation is an American multinational technology corporation which produces computer software, consumer electronics, personal computers, and related services headquartered at the Microsoft Redmond campus located in Redmond, Washington, United States.",TRUE
Millennium Management,mlp,mlp.com,https://logo.clearbit.com/mlp.com,,TRUE
Monetary Authority of Singapore,mas-sg,mas.gov.sg,https://logo.clearbit.com/mas.gov.sg,,TRUE
Morgan Stanley,morgan-stanley,morganstanley.com,https://logo.clearbit.com/morganstanley.com,,TRUE
Motional,motional,motional.com,https://logo.clearbit.com/motional.com,,TRUE
NCS,ncs,ncs.co,https://logo.clearbit.com/ncs.co,,TRUE
NE Digital (NTUC) Singapore,ne-digital-sg,nedigital.sg,https://logo.clearbit.com/nedigital.sg,,TRUE
Netflix,netflix,netflix.com,https://logo.clearbit.com/netflix.com,,TRUE
Ninja Van,ninja-van,ninjavan.co,https://logo.clearbit.com/ninjavan.co,,TRUE
OCBC,ocbc,ocbc.com,https://logo.clearbit.com/ocbc.com,,TRUE
Open Government Products (OGP),open-government-products-(ogp),ogp.gov.sg,https://logo.clearbit.com/ogp.gov.sg,,TRUE
Optiver,optiver,optiver.com,https://logo.clearbit.com/optiver.com,,TRUE
Pactera Edge,pactera-edge,pacteraedge.com,https://logo.clearbit.com/pacteraedge.com,,TRUE
Panasonic,panasonic,panasonic.com,https://logo.clearbit.com/panasonic.com,,TRUE
PayPal,paypal,paypal.com,https://logo.clearbit.com/paypal.com,,TRUE
PricewaterhouseCoopers (PwC),pwc,pwc.com,https://logo.clearbit.com/pwc.com,,TRUE
Procter & Gamble (P&G),pg,pg.com,https://logo.clearbit.com/pg.com,,TRUE
PSA Singapore,psa-singapore,singaporepsa.com,https://logo.clearbit.com/singaporepsa.com,,TRUE
QuantEdge,quantedge,quantedge.com,https://logo.clearbit.com/quantedge.com,,TRUE
Rakuten,rakuten,rakuten.com,https://logo.clearbit.com/rakuten.com,,TRUE
Ramco,ramco,ramco.com,https://logo.clearbit.com/ramco.com,,TRUE
Razer,razer,razer.com,https://logo.clearbit.com/razer.com,,TRUE
Riot Games,riot-games,riotgames.com,https://logo.clearbit.com/riotgames.com,,TRUE
SAP,sap,sap.com,https://logo.clearbit.com/sap.com,,TRUE
Schneider Electric Pte Ltd,se,se.com,https://logo.clearbit.com/se.com,,TRUE
Schroders,schroders,schroders.com,https://logo.clearbit.com/schroders.com,,TRUE
Sea Group,sea-group,sea.com,https://logo.clearbit.com/sea.com,,TRUE
Seagate,seagate,seagate.com,https://logo.clearbit.com/seagate.com,,TRUE
SenseTime,sensetime,sensetime.com,https://logo.clearbit.com/sensetime.com,,TRUE
Sentient.io,sentient-io,sentient.io.com,https://logo.clearbit.com/sentient.io.com,,TRUE
SGInnovate,sginnovate,sginnovate.com,https://logo.clearbit.com/sginnovate.com,,TRUE
Shop,shop,shop.com,https://logo.clearbit.com/shop.com,,TRUE
ShopBack,shopback,shopback.com,https://logo.clearbit.com/shopback.com,,TRUE
Shopee,shopee,shopee.com,https://logo.clearbit.com/shopee.com,,TRUE
Siemens,siemens,siemens.com,https://logo.clearbit.com/siemens.com,,TRUE
Singapore Airlines (SIA),singaporeair,singaporeair.com.sg,,,TRUE
Singapore Armed Forces (MINDEF SAF),singapore-armed-forces-(mindef-saf),mindef.gov.sg,https://logo.clearbit.com/mindef.gov.sg,,TRUE
Singapore Institute of Technology (SIT),sit-sg,singaporetech.edu.sg,https://logo.clearbit.com/singaporetech.edu.sg,,TRUE
SingTel,singtel,singtel.com,https://logo.clearbit.com/singtel.com,,TRUE
Skyline Communications,skyline-communications,skyline.be,https://logo.clearbit.com/skyline.be,,TRUE
Sprinklr,sprinklr,sprinklr.com,https://logo.clearbit.com/sprinklr.com,,TRUE
Squarepoint Capital,squarepoint-capital,squarepoint-capital.com,https://logo.clearbit.com/squarepoint-capital.com,,TRUE
ST Engineering (Singapore),stengg,stengg.com,https://logo.clearbit.com/stengg.com,,TRUE
Standard Chartered,standard-chartered,standardchartered.com,https://logo.clearbit.com/standardchartered.com,,TRUE
StashAway,stashaway,stashaway.sg,https://logo.clearbit.com/stashaway.sg,,TRUE
Stripe,stripe,stripe.com,https://logo.clearbit.com/stripe.com,,TRUE
Syngenta,syngenta,syngenta.com,https://logo.clearbit.com/syngenta.com,,TRUE
Tesla,tesla,tesla.com,https://logo.clearbit.com/tesla.com,,TRUE
Thales,thales,thales.com,https://logo.clearbit.com/thales.com,,TRUE
Thermo Fisher,thermo-fisher,thermofisher.com,https://logo.clearbit.com/thermofisher.com,,TRUE
Thoughtworks,thoughtworks,thoughtworks.com,https://logo.clearbit.com/thoughtworks.com,,TRUE
TikTok,tiktok,tiktok.com,https://logo.clearbit.com/tiktok.com,,TRUE
Titansoft,titansoft,titansoft.com,https://logo.clearbit.com/titansoft.com,,TRUE
Trail of Bits,trail-of-bits,trailofbits.com,https://logo.clearbit.com/trailofbits.com,,TRUE
Trust (Bank),trust-bank,trustbank.sg,https://logo.clearbit.com/trustbank.sg,,TRUE
Trustana,trustana,trustana.com,https://logo.clearbit.com/trustana.com,,TRUE
Ubisoft,ubisoft,ubisoft.com,https://logo.clearbit.com/ubisoft.com,,TRUE
Ubisoft Singapore,ubisoft-singapore,ubisoftsingapore.com,https://logo.clearbit.com/ubisoftsingapore.com,,TRUE
UCARS,ucars,ucars.com,https://logo.clearbit.com/ucars.com,,TRUE
UOB,uob,uob.com,https://logo.clearbit.com/uob.com,,TRUE
Viki,viki,viki.com,https://logo.clearbit.com/viki.com,,TRUE
Virtu Financial,virtu-financial,virtu.com,https://logo.clearbit.com/virtu.com,,TRUE
Visa,visa,visa.com,https://logo.clearbit.com/visa.com,,TRUE
Wintermute,wintermute,wintermute.com,https://logo.clearbit.com/wintermute.com,,TRUE
Wise,wise,wise.com,https://logo.clearbit.com/wise.com,,TRUE
Workato,workato,workato.com,https://logo.clearbit.com/workato.com,,TRUE
WorkClass,WorkClass,workclass.co,https://logo.clearbit.com/workclass.co,,TRUE
Zendesk,zendesk,zendesk.com,https://logo.clearbit.com/zendesk.com,,TRUE
D.E. Shaw,deshaw,deshaw.com,https://logo.clearbit.com/deshaw.com,,TRUE
Five Rings,five-rings,fiverings.com,https://logo.clearbit.com/fiverings.com,,TRUE
Databricks,databricks,databricks.com,https://logo.clearbit.com/databricks.com,,TRUE
Scale AI,scale-ai,scale.com,https://logo.clearbit.com/scale.com,,TRUE
Snap,snap,snap.com,https://logo.clearbit.com/snap.com,,TRUE
Two Sigma,two-sigma,twosigma.com,https://logo.clearbit.com/twosigma.com,,TRUE
Roblox,roblox,roblox.com,https://logo.clearbit.com/roblox.com,,TRUE
Airbnb,airbnb,airbnb.com,https://logo.clearbit.com/airbnb.com,,TRUE
Lyft,lyft,lyft.com,https://logo.clearbit.com/lyft.com,,TRUE
IMC Trading,imc-trading,imc.com,https://logo.clearbit.com/imc.com,,TRUE
Asana,asana,asana.com,https://logo.clearbit.com/asana.com,,TRUE
Robinhood,robinhood,robinhood.com,https://logo.clearbit.com/robinhood.com,,TRUE
Figma,figma,figma.com,https://logo.clearbit.com/figma.com,,TRUE
Coinbase,coinbase,coinbase.com,https://logo.clearbit.com/coinbase.com,,TRUE
Palantir,palantir,palantir.com,https://logo.clearbit.com/palantir.com,,TRUE
Confluent,confluent,confluent.io,https://logo.clearbit.com/confluent.io,,TRUE
Hudson River Trading,hudson-river-trading,hudsonrivertrading.com,https://logo.clearbit.com/hudsonrivertrading.com,,TRUE
Akuna Capital,akuna-capital,akunacapital.com,https://logo.clearbit.com/akunacapital.com,,TRUE
Uber,uber,uber.com,https://logo.clearbit.com/uber.com,,TRUE
Pinterest,pinterest,pinterest.com,https://logo.clearbit.com/pinterest.com,,TRUE
Github,github,github.com,https://logo.clearbit.com/github.com,,TRUE
Slack,slack,slack.com,https://logo.clearbit.com/slack.com,,TRUE
Square,square,square.com,https://logo.clearbit.com/square.com,,TRUE
Doordash,doordash,doordash.com,https://logo.clearbit.com/doordash.com,,TRUE
Linkedin,linkedin,linkedin.com,https://logo.clearbit.com/linkedin.com,,TRUE
Instacart,instacart,instacart.com,https://logo.clearbit.com/instacart.com,,TRUE
Datadog,datadog,datadog.com,https://logo.clearbit.com/datadog.com,,TRUE
Twitter,twitter,twitter.com,https://logo.clearbit.com/twitter.com,,TRUE
Chime,chime,chime.com,https://logo.clearbit.com/chime.com,,TRUE
Nvidia,nvidia,nvidia.com,https://logo.clearbit.com/nvidia.com,,TRUE
Aurora,aurora,aurora.tech,https://logo.clearbit.com/aurora.tech,,TRUE
Twitch,twitch,twitch.com,https://logo.clearbit.com/twitch.com,,TRUE
MongoDB,mongodb,mongodb.com,https://logo.clearbit.com/mongodb.com,,TRUE
Salesforce,salesforce,salesforce.com,https://logo.clearbit.com/salesforce.com,,TRUE
Tableau,tableau,tableau.com,https://logo.clearbit.com/tableau.com,,TRUE
Bloomberg,bloomberg,bloomberg.com,https://logo.clearbit.com/bloomberg.com,,TRUE
Reddit,reddit,reddit.com,https://logo.clearbit.com/reddit.com,,TRUE
Nextdoor,nextdoor,nextdoor.com,https://logo.clearbit.com/nextdoor.com,,TRUE
Argo Ai,argo-ai,argo.ai,https://logo.clearbit.com/argo.ai,,TRUE
Wish,wish,wish.com,https://logo.clearbit.com/wish.com,,TRUE
Zoom,zoom,zoom.com,https://logo.clearbit.com/zoom.com,,TRUE
Atlasssian,atlasssian,atlasssian.com,https://logo.clearbit.com/atlasssian.com,,TRUE
Twilio,twilio,twilio.com,https://logo.clearbit.com/twilio.com,,TRUE
Snowflake,snowflake,snowflake.com,https://logo.clearbit.com/snowflake.com,,TRUE
Dropbox,dropbox,dropbox.com,https://logo.clearbit.com/dropbox.com,,TRUE
Qualtrics,qualtrics,qualtrics.com,https://logo.clearbit.com/qualtrics.com,,TRUE
HubSpot,hubspot,hubspot.com,https://logo.clearbit.com/hubspot.com,,TRUE
Peleton,peleton,onepeleton.com,https://logo.clearbit.com/onepeleton.com,,TRUE
Adobe,adobe,adobe.com,https://logo.clearbit.com/adobe.com,,TRUE
Splunk,splunk,splunk.com,https://logo.clearbit.com/splunk.com,,TRUE
Postmates,postmates,postmates.com,https://logo.clearbit.com/postmates.com,,TRUE
Coursera,coursera,coursera.com,https://logo.clearbit.com/coursera.com,,TRUE
Niantic Labs,niantic-labs,nianticlabs.com,https://logo.clearbit.com/nianticlabs.com,,TRUE
Audible,audible,audible.com,https://logo.clearbit.com/audible.com,,TRUE
Samsung,samsung,samsung.com,https://logo.clearbit.com/samsung.com,,TRUE
Shopify,shopify,shopify.com,https://logo.clearbit.com/shopify.com,,TRUE
VMware,vmware,vmware.com,https://logo.clearbit.com/vmware.com,,TRUE
Zillow,zillow,zillow.com,https://logo.clearbit.com/zillow.com,,TRUE
Spotify,spotify,spotify.com,https://logo.clearbit.com/spotify.com,,TRUE
Cisco Merkari,cisco-merkari,meraki.cisco.com,https://logo.clearbit.com/meraki.cisco.com,,TRUE
Instabase,instabase,instabase.com,https://logo.clearbit.com/instabase.com,,TRUE
Yext,yext,yext.com,https://logo.clearbit.com/yext.com,,TRUE
Disney,disney,disney.com,https://logo.clearbit.com/disney.com,,TRUE
Hulu,hulu,hulu.com,https://logo.clearbit.com/hulu.com,,TRUE
GrubHub,grubhub,grubhub.com,https://logo.clearbit.com/grubhub.com,,TRUE
Duolingo,duolingo,duolingo.com,https://logo.clearbit.com/duolingo.com,,TRUE
Roku,roku,roku.com,https://logo.clearbit.com/roku.com,,TRUE
Okta,okta,okta.com,https://logo.clearbit.com/okta.com,,TRUE
Palo Alto Software,palo-alto-software,paloaltosoftware.com,https://logo.clearbit.com/paloaltosoftware.com,,TRUE
Palo Alto Networks,palo-alto-networks,paloaltonetworks.com,https://logo.clearbit.com/paloaltonetworks.com,,FALSE
Oracle,oracle,oracle.com,https://logo.clearbit.com/oracle.com,,TRUE
Red Hat,red-hat,redhat.com,https://logo.clearbit.com/redhat.com,,TRUE
Intuit,intuit,intuit.com,https://logo.clearbit.com/intuit.com,,TRUE
Box,box,box.com,https://logo.clearbit.com/box.com,,TRUE
Yelp,yelp,yelp.com,https://logo.clearbit.com/yelp.com,,TRUE
Docusign,docusign,docusign.com,https://logo.clearbit.com/docusign.com,,TRUE
Etsy,etsy,etsy.com,https://logo.clearbit.com/etsy.com,,TRUE
Quora,quora,quora.com,https://logo.clearbit.com/quora.com,,TRUE
SquareSpace,squarespace,squarespace.com,https://logo.clearbit.com/squarespace.com,,TRUE
Expedia,expedia,expedia.com,https://logo.clearbit.com/expedia.com,,TRUE
Chewy,chewy,chewy.com,https://logo.clearbit.com/chewy.com,,TRUE
Intel,intel,intel.com,https://logo.clearbit.com/intel.com,,TRUE
Capital One,capital-one,capitalone.com,https://logo.clearbit.com/capitalone.com,,TRUE
American Express,american-express,americanexpress.com,https://logo.clearbit.com/americanexpress.com,,TRUE
Blackrock,blackrock,blackrock.com,https://logo.clearbit.com/blackrock.com,,TRUE
Walmart Labs,walmart-labs,walmartlabs.com,https://logo.clearbit.com/walmartlabs.com,,TRUE
Workday,workday,workday.com,https://logo.clearbit.com/workday.com,,TRUE
SAP,sap,sap.com,https://logo.clearbit.com/sap.com,,TRUE
Pure Storage,pure-storage,purestorage.com,https://logo.clearbit.com/purestorage.com,,TRUE
Nordstrom,nordstrom,nordstrom.com,https://logo.clearbit.com/nordstrom.com,,TRUE
Groupon,groupon,groupon.com,https://logo.clearbit.com/groupon.com,,TRUE
Norton Lifelock,norton-lifelock,nortonlifelock.com,https://logo.clearbit.com/nortonlifelock.com,,TRUE
Yahoo,yahoo,yahoo.com,https://logo.clearbit.com/yahoo.com,,TRUE
PNC Financial Services,pnc-financial-services,pnc.com,https://logo.clearbit.com/pnc.com,,TRUE
NetApp,netapp,netapp.com,https://logo.clearbit.com/netapp.com,,TRUE
GoDaddy,godaddy,godaddy.com,https://logo.clearbit.com/godaddy.com,,TRUE
Wipro,wipro,wipro.com,https://logo.clearbit.com/wipro.com,,TRUE
Infosys,infosys,infosys.com,https://logo.clearbit.com/infosys.com,,TRUE
TCS,tcs,tcs.com,https://logo.clearbit.com/tcs.com,,TRUE
Cognizant,cognizant,cognizant.com,https://logo.clearbit.com/cognizant.com,,TRUE
HCL,hcl,hcl.com,https://logo.clearbit.com/hcl.com,,TRUE
Tech Mahindra,tech-mahindra,techmahindra.com,https://logo.clearbit.com/techmahindra.com,,TRUE
Fujitsu,fujitsu,fujitsu.com,https://logo.clearbit.com/fujitsu.com,,TRUE
NIIT,niit,niit.com,https://logo.clearbit.com/niit.com,,TRUE
Larson & Toubro (L&T),larson-toubro,larsentoubro.com,https://logo.clearbit.com/larsentoubro.com,,TRUE
1 name slug website logoUrl description finalized
2 3forge 3forge 3forge.com https://logo.clearbit.com/3forge.com TRUE
3 99.co 99.co 99.co https://logo.clearbit.com/99.co TRUE
4 Agency for Science, Technology and Research (A*Star) Singapore a-star-sg a-star.edu.sg https://logo.clearbit.com/a-star.edu.sg TRUE
5 Accenture accenture accenture.com https://logo.clearbit.com/accenture.com TRUE
6 Accuracy accuracy accuracy.com https://logo.clearbit.com/accuracy.com TRUE
7 Acronis acronis acronis.com https://logo.clearbit.com/acronis.com TRUE
8 Agoda agoda agoda.com https://logo.clearbit.com/agoda.com TRUE
9 AlphaLab Capital alphalab-capital alphalab.capital https://logo.clearbit.com/alphalab.capital TRUE
10 Alstom alstom alstom.com https://logo.clearbit.com/alstom.com TRUE
11 Amaris AI Pte Ltd amaris-ai-pte-ltd amaris.ai https://logo.clearbit.com/amaris.ai TRUE
12 Amazon amazon amazon.com https://logo.clearbit.com/amazon.com Amazon.com, Inc. is an American multinational technology company that focuses on e-commerce, cloud computing, digital streaming, and artificial intelligence. TRUE
13 Amazon Web Services amazon-web-services aws.amazon.com https://logo.clearbit.com/aws.amazon.com TRUE
14 AMD amd amd.com https://logo.clearbit.com/amd.com TRUE
15 Ant Group ant-group antgroup.com https://logo.clearbit.com/antgroup.com TRUE
16 Apple apple apple.com https://logo.clearbit.com/apple.com Apple Inc. is an American multinational technology company that specializes in consumer electronics, software and online services headquartered in Cupertino, California, United States. TRUE
17 Ascenda ascenda ascendaloyalty.com https://logo.clearbit.com/ascendaloyalty.com TRUE
18 Atome atome atome.sg https://logo.clearbit.com/atome.sg TRUE
19 Autodesk autodesk autodesk.com https://logo.clearbit.com/autodesk.com TRUE
20 Avanade avanade avanade.com https://logo.clearbit.com/avanade.com TRUE
21 Bank of America bank-of-america bankofamerica.com https://logo.clearbit.com/bankofamerica.com TRUE
22 Bank of Singapore bank-of-singapore bankofsingapore.com https://logo.clearbit.com/bankofsingapore.com TRUE
23 betterdata betterdata betterdata.ai https://logo.clearbit.com/betterdata.ai TRUE
24 Binance binance binance.com https://logo.clearbit.com/binance.com TRUE
25 Bosch bosch bosch.com https://logo.clearbit.com/bosch.com TRUE
26 ByteDance bytedance bytedance.com https://logo.clearbit.com/bytedance.com TRUE
27 Carousell carousell carousell.com https://logo.clearbit.com/carousell.com TRUE
28 Carro carro carro.sg https://logo.clearbit.com/carro.sg TRUE
29 Circles.Life circles.life circles.life https://logo.clearbit.com/circles.life TRUE
30 Cisco cisco cisco.com https://logo.clearbit.com/cisco.com TRUE
31 Citadel citadel citadel.com https://logo.clearbit.com/citadel.com TRUE
32 CitiBank citibank citibank.com https://logo.clearbit.com/citibank.com TRUE
33 Cloudflare cloudflare cloudflare.com https://logo.clearbit.com/cloudflare.com TRUE
34 Coinhako coinhako coinhako.com https://logo.clearbit.com/coinhako.com TRUE
35 ComfortDelGro comfortdelgro comfortdelgro.com https://logo.clearbit.com/comfortdelgro.com TRUE
36 Constructor constructor constructor.io https://logo.clearbit.com/constructor.io TRUE
37 Continental continental continental.com https://logo.clearbit.com/continental.com TRUE
38 Creative creative creative.com https://logo.clearbit.com/creative.com TRUE
39 Credit Agricole credit-agricole ca-cib.com https://logo.clearbit.com/ca-cib.com TRUE
40 Credit Suisse credit-suisse credit-suisse.com https://logo.clearbit.com/credit-suisse.com TRUE
41 Crypto.com crypto-com crypto.com https://logo.clearbit.com/crypto.com TRUE
42 CSIT csit csit.gov.sg https://logo.clearbit.com/csit.gov.sg TRUE
43 Daiwa Capital Markets daiwacm daiwacm.com https://logo.clearbit.com/daiwacm.com TRUE
44 DBS dbs dbs.com https://logo.clearbit.com/dbs.com TRUE
45 Defence Science and Technology Agency (DSTA) dsta dsta.gov.sg https://logo.clearbit.com/dsta.gov.sg TRUE
46 Dell dell dell.com https://logo.clearbit.com/dell.com TRUE
47 Deloitte deloitte deloitte.com https://logo.clearbit.com/deloitte.com TRUE
48 DHL dhl dhl.com https://logo.clearbit.com/dhl.com TRUE
49 DRW drw drw.com https://logo.clearbit.com/drw.com TRUE
50 DSO National Laboratories dso-national-laboratories www.dso.org.sg https://logo.clearbit.com/www.dso.org.sg TRUE
51 Dyson dyson dyson.com https://logo.clearbit.com/dyson.com TRUE
52 Energy Market Authority (EMA) energy-market-authority-(ema) ema.gov.sg https://logo.clearbit.com/ema.gov.sg TRUE
53 Ensign InfoSecurity ensign-infosecurity ensigninfosecurity.com https://logo.clearbit.com/ensigninfosecurity.com TRUE
54 Envision Digital envision-digital envision-digital.com https://logo.clearbit.com/envision-digital.com TRUE
55 Equinix equinix equinix.com https://logo.clearbit.com/equinix.com TRUE
56 Ernst and Young ey ey.com https://logo.clearbit.com/ey.com TRUE
57 ExpressVPN expressvpn expressvpn.com https://logo.clearbit.com/expressvpn.com TRUE
58 F5 Networks f5 f5networks.com https://logo.clearbit.com/f5networks.com TRUE
59 Foodpanda foodpanda foodpanda.com https://logo.clearbit.com/foodpanda.com TRUE
60 Garena garena garena.com https://logo.clearbit.com/garena.com TRUE
61 GIC Singapore gic-singapore gic.com.sg https://logo.clearbit.com/gic.com.sg TRUE
62 GlobalFoundries globalfoundries globalfoundries.com https://logo.clearbit.com/globalfoundries.com TRUE
63 Goldman Sachs goldman-sachs goldmansachs.com https://logo.clearbit.com/goldmansachs.com TRUE
64 Google google google.com https://logo.clearbit.com/google.com Google LLC is an American multinational technology company that focuses on search engine technology, online advertising, cloud computing, computer software, quantum computing, e-commerce, artificial intelligence, and consumer electronics. TRUE
65 GovTech Singapore govtech-singapore tech.gov.sg https://logo.clearbit.com/tech.gov.sg TRUE
66 Grab grab grab.com https://logo.clearbit.com/grab.com TRUE
67 Grasshopper grasshopper grasshopper.com https://logo.clearbit.com/grasshopper.com TRUE
68 Hewlett Packard (HP) hp hp.com https://logo.clearbit.com/hp.com TRUE
69 Hitachi Vantara hitachi-vantara hitachivantara.com https://logo.clearbit.com/hitachivantara.com TRUE
70 Hodlnaut hodlnaut hodlnaut.com https://logo.clearbit.com/hodlnaut.com TRUE
71 Home Team Science and Technology Agency Singapore htx-sg htx.gov.sg https://logo.clearbit.com/htx.gov.sg TRUE
72 HOPE Technik hope-technik hopetechnik.com https://logo.clearbit.com/hopetechnik.com TRUE
73 Housing Development Board (HDB) Singapore hdb-sg hdb.gov.sg https://logo.clearbit.com/hdb.gov.sg TRUE
74 Huawei huawei huawei.com https://logo.clearbit.com/huawei.com TRUE
75 Hypotenuse AI hypotenuse-ai hypotenuse.ai https://logo.clearbit.com/hypotenuse.ai TRUE
76 IBM ibm ibm.com https://logo.clearbit.com/ibm.com TRUE
77 IDEMIA idemia idemia.com https://logo.clearbit.com/idemia.com TRUE
78 Illumina illumina illumina.com https://logo.clearbit.com/illumina.com TRUE
79 Income (NTUC) Singapore ntuc-income-sg income.com.sg https://logo.clearbit.com/income.com.sg TRUE
80 Indeed indeed indeed.com https://logo.clearbit.com/indeed.com TRUE
81 Infineon infineon infineon.com https://logo.clearbit.com/infineon.com TRUE
82 Infocomm Media Development Authority (IMDA) Singapore imda-sg imda.gov.sg https://logo.clearbit.com/imda.gov.sg TRUE
83 Integrated Health Information Systems (IHIS) Singapore ihis-sg ihis.com.sg https://logo.clearbit.com/ihis.com.sg TRUE
84 J.P. Morgan (JP Morgan) jp-morgan jpmorgan.com https://logo.clearbit.com/jpmorgan.com TRUE
85 Jane Street jane-street janestreet.com https://logo.clearbit.com/janestreet.com TRUE
86 Johnson & Johnson jnj jnj.com https://logo.clearbit.com/jnj.com TRUE
87 Jump Trading jump-trading jumptrading.com https://logo.clearbit.com/jumptrading.com TRUE
88 KPMG kpmg kpmg.com https://logo.clearbit.com/kpmg.com TRUE
89 Lazada lazada lazada.com https://logo.clearbit.com/lazada.com TRUE
90 Mandiant mandiant mandiant.com https://logo.clearbit.com/mandiant.com TRUE
91 Meta meta meta.com https://logo.clearbit.com/meta.com Meta Platforms, Inc., doing business as Meta and formerly named Facebook, Inc., and TheFacebook, Inc., is an American multinational technology conglomerate based in Menlo Park, California. The company owns Facebook, Instagram, and WhatsApp, among other products and services. TRUE
92 Micron micron micron.com https://logo.clearbit.com/micron.com TRUE
93 Microsoft microsoft microsoft.com https://logo.clearbit.com/microsoft.com Microsoft Corporation is an American multinational technology corporation which produces computer software, consumer electronics, personal computers, and related services headquartered at the Microsoft Redmond campus located in Redmond, Washington, United States. TRUE
94 Millennium Management mlp mlp.com https://logo.clearbit.com/mlp.com TRUE
95 Monetary Authority of Singapore mas-sg mas.gov.sg https://logo.clearbit.com/mas.gov.sg TRUE
96 Morgan Stanley morgan-stanley morganstanley.com https://logo.clearbit.com/morganstanley.com TRUE
97 Motional motional motional.com https://logo.clearbit.com/motional.com TRUE
98 NCS ncs ncs.co https://logo.clearbit.com/ncs.co TRUE
99 NE Digital (NTUC) Singapore ne-digital-sg nedigital.sg https://logo.clearbit.com/nedigital.sg TRUE
100 Netflix netflix netflix.com https://logo.clearbit.com/netflix.com TRUE
101 Ninja Van ninja-van ninjavan.co https://logo.clearbit.com/ninjavan.co TRUE
102 OCBC ocbc ocbc.com https://logo.clearbit.com/ocbc.com TRUE
103 Open Government Products (OGP) open-government-products-(ogp) ogp.gov.sg https://logo.clearbit.com/ogp.gov.sg TRUE
104 Optiver optiver optiver.com https://logo.clearbit.com/optiver.com TRUE
105 Pactera Edge pactera-edge pacteraedge.com https://logo.clearbit.com/pacteraedge.com TRUE
106 Panasonic panasonic panasonic.com https://logo.clearbit.com/panasonic.com TRUE
107 PayPal paypal paypal.com https://logo.clearbit.com/paypal.com TRUE
108 PricewaterhouseCoopers (PwC) pwc pwc.com https://logo.clearbit.com/pwc.com TRUE
109 Procter & Gamble (P&G) pg pg.com https://logo.clearbit.com/pg.com TRUE
110 PSA Singapore psa-singapore singaporepsa.com https://logo.clearbit.com/singaporepsa.com TRUE
111 QuantEdge quantedge quantedge.com https://logo.clearbit.com/quantedge.com TRUE
112 Rakuten rakuten rakuten.com https://logo.clearbit.com/rakuten.com TRUE
113 Ramco ramco ramco.com https://logo.clearbit.com/ramco.com TRUE
114 Razer razer razer.com https://logo.clearbit.com/razer.com TRUE
115 Riot Games riot-games riotgames.com https://logo.clearbit.com/riotgames.com TRUE
116 SAP sap sap.com https://logo.clearbit.com/sap.com TRUE
117 Schneider Electric Pte Ltd se se.com https://logo.clearbit.com/se.com TRUE
118 Schroders schroders schroders.com https://logo.clearbit.com/schroders.com TRUE
119 Sea Group sea-group sea.com https://logo.clearbit.com/sea.com TRUE
120 Seagate seagate seagate.com https://logo.clearbit.com/seagate.com TRUE
121 SenseTime sensetime sensetime.com https://logo.clearbit.com/sensetime.com TRUE
122 Sentient.io sentient-io sentient.io.com https://logo.clearbit.com/sentient.io.com TRUE
123 SGInnovate sginnovate sginnovate.com https://logo.clearbit.com/sginnovate.com TRUE
124 Shop shop shop.com https://logo.clearbit.com/shop.com TRUE
125 ShopBack shopback shopback.com https://logo.clearbit.com/shopback.com TRUE
126 Shopee shopee shopee.com https://logo.clearbit.com/shopee.com TRUE
127 Siemens siemens siemens.com https://logo.clearbit.com/siemens.com TRUE
128 Singapore Airlines (SIA) singaporeair singaporeair.com.sg TRUE
129 Singapore Armed Forces (MINDEF SAF) singapore-armed-forces-(mindef-saf) mindef.gov.sg https://logo.clearbit.com/mindef.gov.sg TRUE
130 Singapore Institute of Technology (SIT) sit-sg singaporetech.edu.sg https://logo.clearbit.com/singaporetech.edu.sg TRUE
131 SingTel singtel singtel.com https://logo.clearbit.com/singtel.com TRUE
132 Skyline Communications skyline-communications skyline.be https://logo.clearbit.com/skyline.be TRUE
133 Sprinklr sprinklr sprinklr.com https://logo.clearbit.com/sprinklr.com TRUE
134 Squarepoint Capital squarepoint-capital squarepoint-capital.com https://logo.clearbit.com/squarepoint-capital.com TRUE
135 ST Engineering (Singapore) stengg stengg.com https://logo.clearbit.com/stengg.com TRUE
136 Standard Chartered standard-chartered standardchartered.com https://logo.clearbit.com/standardchartered.com TRUE
137 StashAway stashaway stashaway.sg https://logo.clearbit.com/stashaway.sg TRUE
138 Stripe stripe stripe.com https://logo.clearbit.com/stripe.com TRUE
139 Syngenta syngenta syngenta.com https://logo.clearbit.com/syngenta.com TRUE
140 Tesla tesla tesla.com https://logo.clearbit.com/tesla.com TRUE
141 Thales thales thales.com https://logo.clearbit.com/thales.com TRUE
142 Thermo Fisher thermo-fisher thermofisher.com https://logo.clearbit.com/thermofisher.com TRUE
143 Thoughtworks thoughtworks thoughtworks.com https://logo.clearbit.com/thoughtworks.com TRUE
144 TikTok tiktok tiktok.com https://logo.clearbit.com/tiktok.com TRUE
145 Titansoft titansoft titansoft.com https://logo.clearbit.com/titansoft.com TRUE
146 Trail of Bits trail-of-bits trailofbits.com https://logo.clearbit.com/trailofbits.com TRUE
147 Trust (Bank) trust-bank trustbank.sg https://logo.clearbit.com/trustbank.sg TRUE
148 Trustana trustana trustana.com https://logo.clearbit.com/trustana.com TRUE
149 Ubisoft ubisoft ubisoft.com https://logo.clearbit.com/ubisoft.com TRUE
150 Ubisoft Singapore ubisoft-singapore ubisoftsingapore.com https://logo.clearbit.com/ubisoftsingapore.com TRUE
151 UCARS ucars ucars.com https://logo.clearbit.com/ucars.com TRUE
152 UOB uob uob.com https://logo.clearbit.com/uob.com TRUE
153 Viki viki viki.com https://logo.clearbit.com/viki.com TRUE
154 Virtu Financial virtu-financial virtu.com https://logo.clearbit.com/virtu.com TRUE
155 Visa visa visa.com https://logo.clearbit.com/visa.com TRUE
156 Wintermute wintermute wintermute.com https://logo.clearbit.com/wintermute.com TRUE
157 Wise wise wise.com https://logo.clearbit.com/wise.com TRUE
158 Workato workato workato.com https://logo.clearbit.com/workato.com TRUE
159 WorkClass WorkClass workclass.co https://logo.clearbit.com/workclass.co TRUE
160 Zendesk zendesk zendesk.com https://logo.clearbit.com/zendesk.com TRUE
161 D.E. Shaw deshaw deshaw.com https://logo.clearbit.com/deshaw.com TRUE
162 Five Rings five-rings fiverings.com https://logo.clearbit.com/fiverings.com TRUE
163 Databricks databricks databricks.com https://logo.clearbit.com/databricks.com TRUE
164 Scale AI scale-ai scale.com https://logo.clearbit.com/scale.com TRUE
165 Snap snap snap.com https://logo.clearbit.com/snap.com TRUE
166 Two Sigma two-sigma twosigma.com https://logo.clearbit.com/twosigma.com TRUE
167 Roblox roblox roblox.com https://logo.clearbit.com/roblox.com TRUE
168 Airbnb airbnb airbnb.com https://logo.clearbit.com/airbnb.com TRUE
169 Lyft lyft lyft.com https://logo.clearbit.com/lyft.com TRUE
170 IMC Trading imc-trading imc.com https://logo.clearbit.com/imc.com TRUE
171 Asana asana asana.com https://logo.clearbit.com/asana.com TRUE
172 Robinhood robinhood robinhood.com https://logo.clearbit.com/robinhood.com TRUE
173 Figma figma figma.com https://logo.clearbit.com/figma.com TRUE
174 Coinbase coinbase coinbase.com https://logo.clearbit.com/coinbase.com TRUE
175 Palantir palantir palantir.com https://logo.clearbit.com/palantir.com TRUE
176 Confluent confluent confluent.io https://logo.clearbit.com/confluent.io TRUE
177 Hudson River Trading hudson-river-trading hudsonrivertrading.com https://logo.clearbit.com/hudsonrivertrading.com TRUE
178 Akuna Capital akuna-capital akunacapital.com https://logo.clearbit.com/akunacapital.com TRUE
179 Uber uber uber.com https://logo.clearbit.com/uber.com TRUE
180 Pinterest pinterest pinterest.com https://logo.clearbit.com/pinterest.com TRUE
181 Github github github.com https://logo.clearbit.com/github.com TRUE
182 Slack slack slack.com https://logo.clearbit.com/slack.com TRUE
183 Square square square.com https://logo.clearbit.com/square.com TRUE
184 Doordash doordash doordash.com https://logo.clearbit.com/doordash.com TRUE
185 Linkedin linkedin linkedin.com https://logo.clearbit.com/linkedin.com TRUE
186 Instacart instacart instacart.com https://logo.clearbit.com/instacart.com TRUE
187 Datadog datadog datadog.com https://logo.clearbit.com/datadog.com TRUE
188 Twitter twitter twitter.com https://logo.clearbit.com/twitter.com TRUE
189 Chime chime chime.com https://logo.clearbit.com/chime.com TRUE
190 Nvidia nvidia nvidia.com https://logo.clearbit.com/nvidia.com TRUE
191 Aurora aurora aurora.tech https://logo.clearbit.com/aurora.tech TRUE
192 Twitch twitch twitch.com https://logo.clearbit.com/twitch.com TRUE
193 MongoDB mongodb mongodb.com https://logo.clearbit.com/mongodb.com TRUE
194 Salesforce salesforce salesforce.com https://logo.clearbit.com/salesforce.com TRUE
195 Tableau tableau tableau.com https://logo.clearbit.com/tableau.com TRUE
196 Bloomberg bloomberg bloomberg.com https://logo.clearbit.com/bloomberg.com TRUE
197 Reddit reddit reddit.com https://logo.clearbit.com/reddit.com TRUE
198 Nextdoor nextdoor nextdoor.com https://logo.clearbit.com/nextdoor.com TRUE
199 Argo Ai argo-ai argo.ai https://logo.clearbit.com/argo.ai TRUE
200 Wish wish wish.com https://logo.clearbit.com/wish.com TRUE
201 Zoom zoom zoom.com https://logo.clearbit.com/zoom.com TRUE
202 Atlasssian atlasssian atlasssian.com https://logo.clearbit.com/atlasssian.com TRUE
203 Twilio twilio twilio.com https://logo.clearbit.com/twilio.com TRUE
204 Snowflake snowflake snowflake.com https://logo.clearbit.com/snowflake.com TRUE
205 Dropbox dropbox dropbox.com https://logo.clearbit.com/dropbox.com TRUE
206 Qualtrics qualtrics qualtrics.com https://logo.clearbit.com/qualtrics.com TRUE
207 HubSpot hubspot hubspot.com https://logo.clearbit.com/hubspot.com TRUE
208 Peleton peleton onepeleton.com https://logo.clearbit.com/onepeleton.com TRUE
209 Adobe adobe adobe.com https://logo.clearbit.com/adobe.com TRUE
210 Splunk splunk splunk.com https://logo.clearbit.com/splunk.com TRUE
211 Postmates postmates postmates.com https://logo.clearbit.com/postmates.com TRUE
212 Coursera coursera coursera.com https://logo.clearbit.com/coursera.com TRUE
213 Niantic Labs niantic-labs nianticlabs.com https://logo.clearbit.com/nianticlabs.com TRUE
214 Audible audible audible.com https://logo.clearbit.com/audible.com TRUE
215 Samsung samsung samsung.com https://logo.clearbit.com/samsung.com TRUE
216 Shopify shopify shopify.com https://logo.clearbit.com/shopify.com TRUE
217 VMware vmware vmware.com https://logo.clearbit.com/vmware.com TRUE
218 Zillow zillow zillow.com https://logo.clearbit.com/zillow.com TRUE
219 Spotify spotify spotify.com https://logo.clearbit.com/spotify.com TRUE
220 Cisco Merkari cisco-merkari meraki.cisco.com https://logo.clearbit.com/meraki.cisco.com TRUE
221 Instabase instabase instabase.com https://logo.clearbit.com/instabase.com TRUE
222 Yext yext yext.com https://logo.clearbit.com/yext.com TRUE
223 Disney disney disney.com https://logo.clearbit.com/disney.com TRUE
224 Hulu hulu hulu.com https://logo.clearbit.com/hulu.com TRUE
225 GrubHub grubhub grubhub.com https://logo.clearbit.com/grubhub.com TRUE
226 Duolingo duolingo duolingo.com https://logo.clearbit.com/duolingo.com TRUE
227 Roku roku roku.com https://logo.clearbit.com/roku.com TRUE
228 Okta okta okta.com https://logo.clearbit.com/okta.com TRUE
229 Palo Alto Software palo-alto-software paloaltosoftware.com https://logo.clearbit.com/paloaltosoftware.com TRUE
230 Palo Alto Networks palo-alto-networks paloaltonetworks.com https://logo.clearbit.com/paloaltonetworks.com FALSE
231 Oracle oracle oracle.com https://logo.clearbit.com/oracle.com TRUE
232 Red Hat red-hat redhat.com https://logo.clearbit.com/redhat.com TRUE
233 Intuit intuit intuit.com https://logo.clearbit.com/intuit.com TRUE
234 Box box box.com https://logo.clearbit.com/box.com TRUE
235 Yelp yelp yelp.com https://logo.clearbit.com/yelp.com TRUE
236 Docusign docusign docusign.com https://logo.clearbit.com/docusign.com TRUE
237 Etsy etsy etsy.com https://logo.clearbit.com/etsy.com TRUE
238 Quora quora quora.com https://logo.clearbit.com/quora.com TRUE
239 SquareSpace squarespace squarespace.com https://logo.clearbit.com/squarespace.com TRUE
240 Expedia expedia expedia.com https://logo.clearbit.com/expedia.com TRUE
241 Chewy chewy chewy.com https://logo.clearbit.com/chewy.com TRUE
242 Intel intel intel.com https://logo.clearbit.com/intel.com TRUE
243 Capital One capital-one capitalone.com https://logo.clearbit.com/capitalone.com TRUE
244 American Express american-express americanexpress.com https://logo.clearbit.com/americanexpress.com TRUE
245 Blackrock blackrock blackrock.com https://logo.clearbit.com/blackrock.com TRUE
246 Walmart Labs walmart-labs walmartlabs.com https://logo.clearbit.com/walmartlabs.com TRUE
247 Workday workday workday.com https://logo.clearbit.com/workday.com TRUE
248 SAP sap sap.com https://logo.clearbit.com/sap.com TRUE
249 Pure Storage pure-storage purestorage.com https://logo.clearbit.com/purestorage.com TRUE
250 Nordstrom nordstrom nordstrom.com https://logo.clearbit.com/nordstrom.com TRUE
251 Groupon groupon groupon.com https://logo.clearbit.com/groupon.com TRUE
252 Norton Lifelock norton-lifelock nortonlifelock.com https://logo.clearbit.com/nortonlifelock.com TRUE
253 Yahoo yahoo yahoo.com https://logo.clearbit.com/yahoo.com TRUE
254 PNC Financial Services pnc-financial-services pnc.com https://logo.clearbit.com/pnc.com TRUE
255 NetApp netapp netapp.com https://logo.clearbit.com/netapp.com TRUE
256 GoDaddy godaddy godaddy.com https://logo.clearbit.com/godaddy.com TRUE
257 Wipro wipro wipro.com https://logo.clearbit.com/wipro.com TRUE
258 Infosys infosys infosys.com https://logo.clearbit.com/infosys.com TRUE
259 TCS tcs tcs.com https://logo.clearbit.com/tcs.com TRUE
260 Cognizant cognizant cognizant.com https://logo.clearbit.com/cognizant.com TRUE
261 HCL hcl hcl.com https://logo.clearbit.com/hcl.com TRUE
262 Tech Mahindra tech-mahindra techmahindra.com https://logo.clearbit.com/techmahindra.com TRUE
263 Fujitsu fujitsu fujitsu.com https://logo.clearbit.com/fujitsu.com TRUE
264 NIIT niit niit.com https://logo.clearbit.com/niit.com TRUE
265 Larson & Toubro (L&T) larson-toubro larsentoubro.com https://logo.clearbit.com/larsentoubro.com TRUE

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,410 @@
{
"data": [
{ "country_id": "1", "sortname": "AF", "country_name": "Afghanistan" },
{ "country_id": "2", "sortname": "AL", "country_name": "Albania" },
{ "country_id": "3", "sortname": "DZ", "country_name": "Algeria" },
{ "country_id": "4", "sortname": "AS", "country_name": "American Samoa" },
{ "country_id": "5", "sortname": "AD", "country_name": "Andorra" },
{ "country_id": "6", "sortname": "AO", "country_name": "Angola" },
{ "country_id": "7", "sortname": "AI", "country_name": "Anguilla" },
{ "country_id": "8", "sortname": "AQ", "country_name": "Antarctica" },
{
"country_id": "9",
"sortname": "AG",
"country_name": "Antigua And Barbuda"
},
{ "country_id": "10", "sortname": "AR", "country_name": "Argentina" },
{ "country_id": "11", "sortname": "AM", "country_name": "Armenia" },
{ "country_id": "12", "sortname": "AW", "country_name": "Aruba" },
{ "country_id": "13", "sortname": "AU", "country_name": "Australia" },
{ "country_id": "14", "sortname": "AT", "country_name": "Austria" },
{ "country_id": "15", "sortname": "AZ", "country_name": "Azerbaijan" },
{ "country_id": "16", "sortname": "BS", "country_name": "The Bahamas" },
{ "country_id": "17", "sortname": "BH", "country_name": "Bahrain" },
{ "country_id": "18", "sortname": "BD", "country_name": "Bangladesh" },
{ "country_id": "19", "sortname": "BB", "country_name": "Barbados" },
{ "country_id": "20", "sortname": "BY", "country_name": "Belarus" },
{ "country_id": "21", "sortname": "BE", "country_name": "Belgium" },
{ "country_id": "22", "sortname": "BZ", "country_name": "Belize" },
{ "country_id": "23", "sortname": "BJ", "country_name": "Benin" },
{ "country_id": "24", "sortname": "BM", "country_name": "Bermuda" },
{ "country_id": "25", "sortname": "BT", "country_name": "Bhutan" },
{ "country_id": "26", "sortname": "BO", "country_name": "Bolivia" },
{
"country_id": "27",
"sortname": "BA",
"country_name": "Bosnia and Herzegovina"
},
{ "country_id": "28", "sortname": "BW", "country_name": "Botswana" },
{ "country_id": "29", "sortname": "BV", "country_name": "Bouvet Island" },
{ "country_id": "30", "sortname": "BR", "country_name": "Brazil" },
{
"country_id": "31",
"sortname": "IO",
"country_name": "British Indian Ocean Territory"
},
{ "country_id": "32", "sortname": "BN", "country_name": "Brunei" },
{ "country_id": "33", "sortname": "BG", "country_name": "Bulgaria" },
{ "country_id": "34", "sortname": "BF", "country_name": "Burkina Faso" },
{ "country_id": "35", "sortname": "BI", "country_name": "Burundi" },
{ "country_id": "36", "sortname": "KH", "country_name": "Cambodia" },
{ "country_id": "37", "sortname": "CM", "country_name": "Cameroon" },
{ "country_id": "38", "sortname": "CA", "country_name": "Canada" },
{ "country_id": "39", "sortname": "CV", "country_name": "Cape Verde" },
{ "country_id": "40", "sortname": "KY", "country_name": "Cayman Islands" },
{
"country_id": "41",
"sortname": "CF",
"country_name": "Central African Republic"
},
{ "country_id": "42", "sortname": "TD", "country_name": "Chad" },
{ "country_id": "43", "sortname": "CL", "country_name": "Chile" },
{ "country_id": "44", "sortname": "CN", "country_name": "China" },
{
"country_id": "45",
"sortname": "CX",
"country_name": "Christmas Island"
},
{
"country_id": "46",
"sortname": "CC",
"country_name": "Cocos (Keeling) Islands"
},
{ "country_id": "47", "sortname": "CO", "country_name": "Colombia" },
{ "country_id": "48", "sortname": "KM", "country_name": "Comoros" },
{ "country_id": "49", "sortname": "CG", "country_name": "Congo" },
{
"country_id": "50",
"sortname": "CD",
"country_name": "Democratic Republic of The Congo"
},
{ "country_id": "51", "sortname": "CK", "country_name": "Cook Islands" },
{ "country_id": "52", "sortname": "CR", "country_name": "Costa Rica" },
{
"country_id": "53",
"sortname": "CI",
"country_name": "Cote D'Ivoire (Ivory Coast)"
},
{
"country_id": "54",
"sortname": "HR",
"country_name": "Croatia (Hrvatska)"
},
{ "country_id": "55", "sortname": "CU", "country_name": "Cuba" },
{ "country_id": "56", "sortname": "CY", "country_name": "Cyprus" },
{ "country_id": "57", "sortname": "CZ", "country_name": "Czech Republic" },
{ "country_id": "58", "sortname": "DK", "country_name": "Denmark" },
{ "country_id": "59", "sortname": "DJ", "country_name": "Djibouti" },
{ "country_id": "60", "sortname": "DM", "country_name": "Dominica" },
{
"country_id": "61",
"sortname": "DO",
"country_name": "Dominican Republic"
},
{ "country_id": "62", "sortname": "TP", "country_name": "East Timor" },
{ "country_id": "63", "sortname": "EC", "country_name": "Ecuador" },
{ "country_id": "64", "sortname": "EG", "country_name": "Egypt" },
{ "country_id": "65", "sortname": "SV", "country_name": "El Salvador" },
{
"country_id": "66",
"sortname": "GQ",
"country_name": "Equatorial Guinea"
},
{ "country_id": "67", "sortname": "ER", "country_name": "Eritrea" },
{ "country_id": "68", "sortname": "EE", "country_name": "Estonia" },
{ "country_id": "69", "sortname": "ET", "country_name": "Ethiopia" },
{
"country_id": "70",
"sortname": "XA",
"country_name": "External Territories of Australia"
},
{
"country_id": "71",
"sortname": "FK",
"country_name": "Falkland Islands"
},
{ "country_id": "72", "sortname": "FO", "country_name": "Faroe Islands" },
{ "country_id": "73", "sortname": "FJ", "country_name": "Fiji Islands" },
{ "country_id": "74", "sortname": "FI", "country_name": "Finland" },
{ "country_id": "75", "sortname": "FR", "country_name": "France" },
{ "country_id": "76", "sortname": "GF", "country_name": "French Guiana" },
{
"country_id": "77",
"sortname": "PF",
"country_name": "French Polynesia"
},
{
"country_id": "78",
"sortname": "TF",
"country_name": "French Southern Territories"
},
{ "country_id": "79", "sortname": "GA", "country_name": "Gabon" },
{ "country_id": "80", "sortname": "GM", "country_name": "The Gambia" },
{ "country_id": "81", "sortname": "GE", "country_name": "Georgia" },
{ "country_id": "82", "sortname": "DE", "country_name": "Germany" },
{ "country_id": "83", "sortname": "GH", "country_name": "Ghana" },
{ "country_id": "84", "sortname": "GI", "country_name": "Gibraltar" },
{ "country_id": "85", "sortname": "GR", "country_name": "Greece" },
{ "country_id": "86", "sortname": "GL", "country_name": "Greenland" },
{ "country_id": "87", "sortname": "GD", "country_name": "Grenada" },
{ "country_id": "88", "sortname": "GP", "country_name": "Guadeloupe" },
{ "country_id": "89", "sortname": "GU", "country_name": "Guam" },
{ "country_id": "90", "sortname": "GT", "country_name": "Guatemala" },
{
"country_id": "91",
"sortname": "XU",
"country_name": "Guernsey and Alderney"
},
{ "country_id": "92", "sortname": "GN", "country_name": "Guinea" },
{ "country_id": "93", "sortname": "GW", "country_name": "Guinea-Bissau" },
{ "country_id": "94", "sortname": "GY", "country_name": "Guyana" },
{ "country_id": "95", "sortname": "HT", "country_name": "Haiti" },
{
"country_id": "96",
"sortname": "HM",
"country_name": "Heard and McDonald Islands"
},
{ "country_id": "97", "sortname": "HN", "country_name": "Honduras" },
{
"country_id": "98",
"sortname": "HK",
"country_name": "Hong Kong"
},
{ "country_id": "99", "sortname": "HU", "country_name": "Hungary" },
{ "country_id": "100", "sortname": "IS", "country_name": "Iceland" },
{ "country_id": "101", "sortname": "IN", "country_name": "India" },
{ "country_id": "102", "sortname": "ID", "country_name": "Indonesia" },
{ "country_id": "103", "sortname": "IR", "country_name": "Iran" },
{ "country_id": "104", "sortname": "IQ", "country_name": "Iraq" },
{ "country_id": "105", "sortname": "IE", "country_name": "Ireland" },
{ "country_id": "106", "sortname": "IL", "country_name": "Israel" },
{ "country_id": "107", "sortname": "IT", "country_name": "Italy" },
{ "country_id": "108", "sortname": "JM", "country_name": "Jamaica" },
{ "country_id": "109", "sortname": "JP", "country_name": "Japan" },
{ "country_id": "110", "sortname": "XJ", "country_name": "Jersey" },
{ "country_id": "111", "sortname": "JO", "country_name": "Jordan" },
{ "country_id": "112", "sortname": "KZ", "country_name": "Kazakhstan" },
{ "country_id": "113", "sortname": "KE", "country_name": "Kenya" },
{ "country_id": "114", "sortname": "KI", "country_name": "Kiribati" },
{ "country_id": "115", "sortname": "KP", "country_name": "North Korea" },
{ "country_id": "116", "sortname": "KR", "country_name": "South Korea" },
{ "country_id": "117", "sortname": "KW", "country_name": "Kuwait" },
{ "country_id": "118", "sortname": "KG", "country_name": "Kyrgyzstan" },
{ "country_id": "119", "sortname": "LA", "country_name": "Laos" },
{ "country_id": "120", "sortname": "LV", "country_name": "Latvia" },
{ "country_id": "121", "sortname": "LB", "country_name": "Lebanon" },
{ "country_id": "122", "sortname": "LS", "country_name": "Lesotho" },
{ "country_id": "123", "sortname": "LR", "country_name": "Liberia" },
{ "country_id": "124", "sortname": "LY", "country_name": "Libya" },
{ "country_id": "125", "sortname": "LI", "country_name": "Liechtenstein" },
{ "country_id": "126", "sortname": "LT", "country_name": "Lithuania" },
{ "country_id": "127", "sortname": "LU", "country_name": "Luxembourg" },
{ "country_id": "128", "sortname": "MO", "country_name": "Macau" },
{ "country_id": "129", "sortname": "MK", "country_name": "Macedonia" },
{ "country_id": "130", "sortname": "MG", "country_name": "Madagascar" },
{ "country_id": "131", "sortname": "MW", "country_name": "Malawi" },
{ "country_id": "132", "sortname": "MY", "country_name": "Malaysia" },
{ "country_id": "133", "sortname": "MV", "country_name": "Maldives" },
{ "country_id": "134", "sortname": "ML", "country_name": "Mali" },
{ "country_id": "135", "sortname": "MT", "country_name": "Malta" },
{ "country_id": "136", "sortname": "XM", "country_name": "Isle of Man" },
{
"country_id": "137",
"sortname": "MH",
"country_name": "Marshall Islands"
},
{ "country_id": "138", "sortname": "MQ", "country_name": "Martinique" },
{ "country_id": "139", "sortname": "MR", "country_name": "Mauritania" },
{ "country_id": "140", "sortname": "MU", "country_name": "Mauritius" },
{ "country_id": "141", "sortname": "YT", "country_name": "Mayotte" },
{ "country_id": "142", "sortname": "MX", "country_name": "Mexico" },
{ "country_id": "143", "sortname": "FM", "country_name": "Micronesia" },
{ "country_id": "144", "sortname": "MD", "country_name": "Moldova" },
{ "country_id": "145", "sortname": "MC", "country_name": "Monaco" },
{ "country_id": "146", "sortname": "MN", "country_name": "Mongolia" },
{ "country_id": "147", "sortname": "MS", "country_name": "Montserrat" },
{ "country_id": "148", "sortname": "MA", "country_name": "Morocco" },
{ "country_id": "149", "sortname": "MZ", "country_name": "Mozambique" },
{ "country_id": "150", "sortname": "MM", "country_name": "Myanmar" },
{ "country_id": "151", "sortname": "NA", "country_name": "Namibia" },
{ "country_id": "152", "sortname": "NR", "country_name": "Nauru" },
{ "country_id": "153", "sortname": "NP", "country_name": "Nepal" },
{
"country_id": "154",
"sortname": "AN",
"country_name": "Netherlands Antilles"
},
{
"country_id": "155",
"sortname": "NL",
"country_name": "Netherlands The"
},
{ "country_id": "156", "sortname": "NC", "country_name": "New Caledonia" },
{ "country_id": "157", "sortname": "NZ", "country_name": "New Zealand" },
{ "country_id": "158", "sortname": "NI", "country_name": "Nicaragua" },
{ "country_id": "159", "sortname": "NE", "country_name": "Niger" },
{ "country_id": "160", "sortname": "NG", "country_name": "Nigeria" },
{ "country_id": "161", "sortname": "NU", "country_name": "Niue" },
{ "country_id": "162", "sortname": "NF", "country_name": "Norfolk Island" },
{
"country_id": "163",
"sortname": "MP",
"country_name": "Northern Mariana Islands"
},
{ "country_id": "164", "sortname": "NO", "country_name": "Norway" },
{ "country_id": "165", "sortname": "OM", "country_name": "Oman" },
{ "country_id": "166", "sortname": "PK", "country_name": "Pakistan" },
{ "country_id": "167", "sortname": "PW", "country_name": "Palau" },
{
"country_id": "168",
"sortname": "PS",
"country_name": "Palestinian Territory Occupied"
},
{ "country_id": "169", "sortname": "PA", "country_name": "Panama" },
{
"country_id": "170",
"sortname": "PG",
"country_name": "Papua new Guinea"
},
{ "country_id": "171", "sortname": "PY", "country_name": "Paraguay" },
{ "country_id": "172", "sortname": "PE", "country_name": "Peru" },
{ "country_id": "173", "sortname": "PH", "country_name": "Philippines" },
{
"country_id": "174",
"sortname": "PN",
"country_name": "Pitcairn Island"
},
{ "country_id": "175", "sortname": "PL", "country_name": "Poland" },
{ "country_id": "176", "sortname": "PT", "country_name": "Portugal" },
{ "country_id": "177", "sortname": "PR", "country_name": "Puerto Rico" },
{ "country_id": "178", "sortname": "QA", "country_name": "Qatar" },
{ "country_id": "179", "sortname": "RE", "country_name": "Reunion" },
{ "country_id": "180", "sortname": "RO", "country_name": "Romania" },
{ "country_id": "181", "sortname": "RU", "country_name": "Russia" },
{ "country_id": "182", "sortname": "RW", "country_name": "Rwanda" },
{ "country_id": "183", "sortname": "SH", "country_name": "Saint Helena" },
{
"country_id": "184",
"sortname": "KN",
"country_name": "Saint Kitts And Nevis"
},
{ "country_id": "185", "sortname": "LC", "country_name": "Saint Lucia" },
{
"country_id": "186",
"sortname": "PM",
"country_name": "Saint Pierre and Miquelon"
},
{
"country_id": "187",
"sortname": "VC",
"country_name": "Saint Vincent and The Grenadines"
},
{ "country_id": "188", "sortname": "WS", "country_name": "Samoa" },
{ "country_id": "189", "sortname": "SM", "country_name": "San Marino" },
{
"country_id": "190",
"sortname": "ST",
"country_name": "Sao Tome and Principe"
},
{ "country_id": "191", "sortname": "SA", "country_name": "Saudi Arabia" },
{ "country_id": "192", "sortname": "SN", "country_name": "Senegal" },
{ "country_id": "193", "sortname": "RS", "country_name": "Serbia" },
{ "country_id": "194", "sortname": "SC", "country_name": "Seychelles" },
{ "country_id": "195", "sortname": "SL", "country_name": "Sierra Leone" },
{ "country_id": "196", "sortname": "SG", "country_name": "Singapore" },
{ "country_id": "197", "sortname": "SK", "country_name": "Slovakia" },
{ "country_id": "198", "sortname": "SI", "country_name": "Slovenia" },
{
"country_id": "199",
"sortname": "XG",
"country_name": "Smaller Territories of the UK"
},
{
"country_id": "200",
"sortname": "SB",
"country_name": "Solomon Islands"
},
{ "country_id": "201", "sortname": "SO", "country_name": "Somalia" },
{ "country_id": "202", "sortname": "ZA", "country_name": "South Africa" },
{ "country_id": "203", "sortname": "GS", "country_name": "South Georgia" },
{ "country_id": "204", "sortname": "SS", "country_name": "South Sudan" },
{ "country_id": "205", "sortname": "ES", "country_name": "Spain" },
{ "country_id": "206", "sortname": "LK", "country_name": "Sri Lanka" },
{ "country_id": "207", "sortname": "SD", "country_name": "Sudan" },
{ "country_id": "208", "sortname": "SR", "country_name": "Suriname" },
{
"country_id": "209",
"sortname": "SJ",
"country_name": "Svalbard And Jan Mayen Islands"
},
{ "country_id": "210", "sortname": "SZ", "country_name": "Swaziland" },
{ "country_id": "211", "sortname": "SE", "country_name": "Sweden" },
{ "country_id": "212", "sortname": "CH", "country_name": "Switzerland" },
{ "country_id": "213", "sortname": "SY", "country_name": "Syria" },
{ "country_id": "214", "sortname": "TW", "country_name": "Taiwan" },
{ "country_id": "215", "sortname": "TJ", "country_name": "Tajikistan" },
{ "country_id": "216", "sortname": "TZ", "country_name": "Tanzania" },
{ "country_id": "217", "sortname": "TH", "country_name": "Thailand" },
{ "country_id": "218", "sortname": "TG", "country_name": "Togo" },
{ "country_id": "219", "sortname": "TK", "country_name": "Tokelau" },
{ "country_id": "220", "sortname": "TO", "country_name": "Tonga" },
{
"country_id": "221",
"sortname": "TT",
"country_name": "Trinidad And Tobago"
},
{ "country_id": "222", "sortname": "TN", "country_name": "Tunisia" },
{ "country_id": "223", "sortname": "TR", "country_name": "Turkey" },
{ "country_id": "224", "sortname": "TM", "country_name": "Turkmenistan" },
{
"country_id": "225",
"sortname": "TC",
"country_name": "Turks And Caicos Islands"
},
{ "country_id": "226", "sortname": "TV", "country_name": "Tuvalu" },
{ "country_id": "227", "sortname": "UG", "country_name": "Uganda" },
{ "country_id": "228", "sortname": "UA", "country_name": "Ukraine" },
{
"country_id": "229",
"sortname": "AE",
"country_name": "United Arab Emirates"
},
{ "country_id": "230", "sortname": "GB", "country_name": "United Kingdom" },
{ "country_id": "231", "sortname": "US", "country_name": "United States" },
{
"country_id": "232",
"sortname": "UM",
"country_name": "United States Minor Outlying Islands"
},
{ "country_id": "233", "sortname": "UY", "country_name": "Uruguay" },
{ "country_id": "234", "sortname": "UZ", "country_name": "Uzbekistan" },
{ "country_id": "235", "sortname": "VU", "country_name": "Vanuatu" },
{
"country_id": "236",
"sortname": "VA",
"country_name": "Vatican City State (Holy See)"
},
{ "country_id": "237", "sortname": "VE", "country_name": "Venezuela" },
{ "country_id": "238", "sortname": "VN", "country_name": "Vietnam" },
{
"country_id": "239",
"sortname": "VG",
"country_name": "Virgin Islands (British)"
},
{
"country_id": "240",
"sortname": "VI",
"country_name": "Virgin Islands (US)"
},
{
"country_id": "241",
"sortname": "WF",
"country_name": "Wallis And Futuna Islands"
},
{ "country_id": "242", "sortname": "EH", "country_name": "Western Sahara" },
{ "country_id": "243", "sortname": "YE", "country_name": "Yemen" },
{ "country_id": "244", "sortname": "YU", "country_name": "Yugoslavia" },
{ "country_id": "245", "sortname": "ZM", "country_name": "Zambia" },
{ "country_id": "246", "sortname": "ZW", "country_name": "Zimbabwe" }
]
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,73 @@
-- CreateTable
CREATE TABLE "Example" (
"id" TEXT NOT NULL,
CONSTRAINT "Example_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "Account" (
"id" TEXT NOT NULL,
"userId" TEXT NOT NULL,
"type" TEXT NOT NULL,
"provider" TEXT NOT NULL,
"providerAccountId" TEXT NOT NULL,
"refresh_token" TEXT,
"access_token" TEXT,
"expires_at" INTEGER,
"token_type" TEXT,
"scope" TEXT,
"id_token" TEXT,
"session_state" TEXT,
CONSTRAINT "Account_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "Session" (
"id" TEXT NOT NULL,
"sessionToken" TEXT NOT NULL,
"userId" TEXT NOT NULL,
"expires" TIMESTAMP(3) NOT NULL,
CONSTRAINT "Session_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "User" (
"id" TEXT NOT NULL,
"name" TEXT,
"email" TEXT,
"emailVerified" TIMESTAMP(3),
"image" TEXT,
CONSTRAINT "User_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "VerificationToken" (
"identifier" TEXT NOT NULL,
"token" TEXT NOT NULL,
"expires" TIMESTAMP(3) NOT NULL
);
-- CreateIndex
CREATE UNIQUE INDEX "Account_provider_providerAccountId_key" ON "Account"("provider", "providerAccountId");
-- CreateIndex
CREATE UNIQUE INDEX "Session_sessionToken_key" ON "Session"("sessionToken");
-- CreateIndex
CREATE UNIQUE INDEX "User_email_key" ON "User"("email");
-- CreateIndex
CREATE UNIQUE INDEX "VerificationToken_token_key" ON "VerificationToken"("token");
-- CreateIndex
CREATE UNIQUE INDEX "VerificationToken_identifier_token_key" ON "VerificationToken"("identifier", "token");
-- AddForeignKey
ALTER TABLE "Account" ADD CONSTRAINT "Account_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "Session" ADD CONSTRAINT "Session_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE;

View File

@ -0,0 +1,26 @@
/*
Warnings:
- You are about to drop the `Example` table. If the table is not empty, all the data it contains will be lost.
*/
-- CreateEnum
CREATE TYPE "TodoStatus" AS ENUM ('INCOMPLETE', 'COMPLETE');
-- DropTable
DROP TABLE "Example";
-- CreateTable
CREATE TABLE "Todo" (
"id" TEXT NOT NULL,
"userId" TEXT NOT NULL,
"text" TEXT NOT NULL,
"status" "TodoStatus" NOT NULL DEFAULT 'INCOMPLETE',
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updatedAt" TIMESTAMP(3) NOT NULL,
CONSTRAINT "Todo_pkey" PRIMARY KEY ("id")
);
-- AddForeignKey
ALTER TABLE "Todo" ADD CONSTRAINT "Todo_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE;

View File

@ -0,0 +1,15 @@
-- CreateTable
CREATE TABLE "Company" (
"id" TEXT NOT NULL,
"name" TEXT NOT NULL,
"slug" TEXT NOT NULL,
"description" TEXT,
"logoUrl" TEXT,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updatedAt" TIMESTAMP(3) NOT NULL,
CONSTRAINT "Company_pkey" PRIMARY KEY ("id")
);
-- CreateIndex
CREATE UNIQUE INDEX "Company_slug_key" ON "Company"("slug");

View File

@ -0,0 +1,74 @@
-- CreateEnum
CREATE TYPE "ResumesSection" AS ENUM ('GENERAL', 'EDUCATION', 'EXPERIENCE', 'PROJECTS', 'SKILLS');
-- CreateTable
CREATE TABLE "ResumesResume" (
"id" TEXT NOT NULL,
"userId" TEXT NOT NULL,
"title" TEXT NOT NULL,
"role" TEXT NOT NULL,
"experience" TEXT NOT NULL,
"location" TEXT NOT NULL,
"url" TEXT NOT NULL,
"additionalInfo" TEXT,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updatedAt" TIMESTAMP(3) NOT NULL,
CONSTRAINT "ResumesResume_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "ResumesStar" (
"id" TEXT NOT NULL,
"resumeId" TEXT NOT NULL,
"userId" TEXT NOT NULL,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT "ResumesStar_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "ResumesComment" (
"id" TEXT NOT NULL,
"resumeId" TEXT NOT NULL,
"userId" TEXT NOT NULL,
"description" TEXT NOT NULL,
"section" "ResumesSection" NOT NULL,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updatedAt" TIMESTAMP(3) NOT NULL,
CONSTRAINT "ResumesComment_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "ResumesCommentVote" (
"id" TEXT NOT NULL,
"commentId" TEXT NOT NULL,
"userId" TEXT NOT NULL,
"value" INTEGER NOT NULL,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updatedAt" TIMESTAMP(3) NOT NULL,
CONSTRAINT "ResumesCommentVote_pkey" PRIMARY KEY ("id")
);
-- AddForeignKey
ALTER TABLE "ResumesResume" ADD CONSTRAINT "ResumesResume_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "ResumesStar" ADD CONSTRAINT "ResumesStar_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "ResumesStar" ADD CONSTRAINT "ResumesStar_resumeId_fkey" FOREIGN KEY ("resumeId") REFERENCES "ResumesResume"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "ResumesComment" ADD CONSTRAINT "ResumesComment_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "ResumesComment" ADD CONSTRAINT "ResumesComment_resumeId_fkey" FOREIGN KEY ("resumeId") REFERENCES "ResumesResume"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "ResumesCommentVote" ADD CONSTRAINT "ResumesCommentVote_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "ResumesCommentVote" ADD CONSTRAINT "ResumesCommentVote_commentId_fkey" FOREIGN KEY ("commentId") REFERENCES "ResumesComment"("id") ON DELETE CASCADE ON UPDATE CASCADE;

View File

@ -0,0 +1,74 @@
/*
Warnings:
- You are about to drop the column `userId` on the `ResumesComment` table. All the data in the column will be lost.
- You are about to drop the column `userId` on the `ResumesCommentVote` table. All the data in the column will be lost.
- You are about to drop the column `userId` on the `ResumesResume` table. All the data in the column will be lost.
- You are about to drop the column `userId` on the `ResumesStar` table. All the data in the column will be lost.
- A unique constraint covering the columns `[commentId,resumesProfileId]` on the table `ResumesCommentVote` will be added. If there are existing duplicate values, this will fail.
- A unique constraint covering the columns `[resumeId,resumesProfileId]` on the table `ResumesStar` will be added. If there are existing duplicate values, this will fail.
- Added the required column `resumesProfileId` to the `ResumesComment` table without a default value. This is not possible if the table is not empty.
- Added the required column `resumesProfileId` to the `ResumesCommentVote` table without a default value. This is not possible if the table is not empty.
- Added the required column `resumesProfileId` to the `ResumesResume` table without a default value. This is not possible if the table is not empty.
- Added the required column `resumesProfileId` to the `ResumesStar` table without a default value. This is not possible if the table is not empty.
*/
-- DropForeignKey
ALTER TABLE "ResumesComment" DROP CONSTRAINT "ResumesComment_userId_fkey";
-- DropForeignKey
ALTER TABLE "ResumesCommentVote" DROP CONSTRAINT "ResumesCommentVote_userId_fkey";
-- DropForeignKey
ALTER TABLE "ResumesResume" DROP CONSTRAINT "ResumesResume_userId_fkey";
-- DropForeignKey
ALTER TABLE "ResumesStar" DROP CONSTRAINT "ResumesStar_userId_fkey";
-- AlterTable
ALTER TABLE "ResumesComment" DROP COLUMN "userId",
ADD COLUMN "resumesProfileId" TEXT NOT NULL;
-- AlterTable
ALTER TABLE "ResumesCommentVote" DROP COLUMN "userId",
ADD COLUMN "resumesProfileId" TEXT NOT NULL;
-- AlterTable
ALTER TABLE "ResumesResume" DROP COLUMN "userId",
ADD COLUMN "resumesProfileId" TEXT NOT NULL;
-- AlterTable
ALTER TABLE "ResumesStar" DROP COLUMN "userId",
ADD COLUMN "resumesProfileId" TEXT NOT NULL;
-- CreateTable
CREATE TABLE "ResumesProfile" (
"id" TEXT NOT NULL,
"userId" TEXT NOT NULL,
CONSTRAINT "ResumesProfile_pkey" PRIMARY KEY ("id")
);
-- CreateIndex
CREATE UNIQUE INDEX "ResumesProfile_userId_key" ON "ResumesProfile"("userId");
-- CreateIndex
CREATE UNIQUE INDEX "ResumesCommentVote_commentId_resumesProfileId_key" ON "ResumesCommentVote"("commentId", "resumesProfileId");
-- CreateIndex
CREATE UNIQUE INDEX "ResumesStar_resumeId_resumesProfileId_key" ON "ResumesStar"("resumeId", "resumesProfileId");
-- AddForeignKey
ALTER TABLE "ResumesProfile" ADD CONSTRAINT "ResumesProfile_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "ResumesResume" ADD CONSTRAINT "ResumesResume_resumesProfileId_fkey" FOREIGN KEY ("resumesProfileId") REFERENCES "ResumesProfile"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "ResumesStar" ADD CONSTRAINT "ResumesStar_resumesProfileId_fkey" FOREIGN KEY ("resumesProfileId") REFERENCES "ResumesProfile"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "ResumesComment" ADD CONSTRAINT "ResumesComment_resumesProfileId_fkey" FOREIGN KEY ("resumesProfileId") REFERENCES "ResumesProfile"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "ResumesCommentVote" ADD CONSTRAINT "ResumesCommentVote_resumesProfileId_fkey" FOREIGN KEY ("resumesProfileId") REFERENCES "ResumesProfile"("id") ON DELETE CASCADE ON UPDATE CASCADE;

View File

@ -0,0 +1,171 @@
-- CreateEnum
CREATE TYPE "QuestionsVote" AS ENUM ('NO_VOTE', 'UPVOTE', 'DOWNVOTE');
-- CreateTable
CREATE TABLE "QuestionsQuestion" (
"id" TEXT NOT NULL,
"userId" TEXT,
"content" TEXT NOT NULL,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updatedAt" TIMESTAMP(3) NOT NULL,
CONSTRAINT "QuestionsQuestion_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "QuestionsQuestionEncounter" (
"id" TEXT NOT NULL,
"questionId" TEXT NOT NULL,
"userId" TEXT,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updatedAt" TIMESTAMP(3) NOT NULL,
CONSTRAINT "QuestionsQuestionEncounter_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "QuestionsQuestionVote" (
"id" TEXT NOT NULL,
"questionId" TEXT NOT NULL,
"userId" TEXT,
"vote" "QuestionsVote" NOT NULL,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updatedAt" TIMESTAMP(3) NOT NULL,
CONSTRAINT "QuestionsQuestionVote_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "QuestionsQuestionComment" (
"id" TEXT NOT NULL,
"questionId" TEXT NOT NULL,
"userId" TEXT,
"content" TEXT NOT NULL,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updatedAt" TIMESTAMP(3) NOT NULL,
CONSTRAINT "QuestionsQuestionComment_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "QuestionsQuestionCommentVote" (
"id" TEXT NOT NULL,
"questionCommentId" TEXT NOT NULL,
"userId" TEXT,
"vote" "QuestionsVote" NOT NULL,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updatedAt" TIMESTAMP(3) NOT NULL,
CONSTRAINT "QuestionsQuestionCommentVote_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "QuestionsAnswer" (
"id" TEXT NOT NULL,
"questionId" TEXT NOT NULL,
"userId" TEXT,
"content" TEXT NOT NULL,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updatedAt" TIMESTAMP(3) NOT NULL,
CONSTRAINT "QuestionsAnswer_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "QuestionsAnswerVote" (
"id" TEXT NOT NULL,
"answerId" TEXT NOT NULL,
"userId" TEXT,
"vote" "QuestionsVote" NOT NULL,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updatedAt" TIMESTAMP(3) NOT NULL,
CONSTRAINT "QuestionsAnswerVote_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "QuestionsAnswerComment" (
"id" TEXT NOT NULL,
"answerId" TEXT NOT NULL,
"userId" TEXT,
"content" TEXT NOT NULL,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updatedAt" TIMESTAMP(3) NOT NULL,
CONSTRAINT "QuestionsAnswerComment_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "QuestionsAnswerCommentVote" (
"id" TEXT NOT NULL,
"answerCommentId" TEXT NOT NULL,
"userId" TEXT,
"vote" "QuestionsVote" NOT NULL,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updatedAt" TIMESTAMP(3) NOT NULL,
CONSTRAINT "QuestionsAnswerCommentVote_pkey" PRIMARY KEY ("id")
);
-- CreateIndex
CREATE UNIQUE INDEX "QuestionsQuestionVote_questionId_userId_key" ON "QuestionsQuestionVote"("questionId", "userId");
-- CreateIndex
CREATE UNIQUE INDEX "QuestionsQuestionCommentVote_questionCommentId_userId_key" ON "QuestionsQuestionCommentVote"("questionCommentId", "userId");
-- CreateIndex
CREATE UNIQUE INDEX "QuestionsAnswerVote_answerId_userId_key" ON "QuestionsAnswerVote"("answerId", "userId");
-- CreateIndex
CREATE UNIQUE INDEX "QuestionsAnswerCommentVote_answerCommentId_userId_key" ON "QuestionsAnswerCommentVote"("answerCommentId", "userId");
-- AddForeignKey
ALTER TABLE "QuestionsQuestion" ADD CONSTRAINT "QuestionsQuestion_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE SET NULL ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "QuestionsQuestionEncounter" ADD CONSTRAINT "QuestionsQuestionEncounter_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE SET NULL ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "QuestionsQuestionEncounter" ADD CONSTRAINT "QuestionsQuestionEncounter_questionId_fkey" FOREIGN KEY ("questionId") REFERENCES "QuestionsQuestion"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "QuestionsQuestionVote" ADD CONSTRAINT "QuestionsQuestionVote_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE SET NULL ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "QuestionsQuestionVote" ADD CONSTRAINT "QuestionsQuestionVote_questionId_fkey" FOREIGN KEY ("questionId") REFERENCES "QuestionsQuestion"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "QuestionsQuestionComment" ADD CONSTRAINT "QuestionsQuestionComment_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE SET NULL ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "QuestionsQuestionComment" ADD CONSTRAINT "QuestionsQuestionComment_questionId_fkey" FOREIGN KEY ("questionId") REFERENCES "QuestionsQuestion"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "QuestionsQuestionCommentVote" ADD CONSTRAINT "QuestionsQuestionCommentVote_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE SET NULL ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "QuestionsQuestionCommentVote" ADD CONSTRAINT "QuestionsQuestionCommentVote_questionCommentId_fkey" FOREIGN KEY ("questionCommentId") REFERENCES "QuestionsQuestionComment"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "QuestionsAnswer" ADD CONSTRAINT "QuestionsAnswer_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE SET NULL ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "QuestionsAnswer" ADD CONSTRAINT "QuestionsAnswer_questionId_fkey" FOREIGN KEY ("questionId") REFERENCES "QuestionsQuestion"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "QuestionsAnswerVote" ADD CONSTRAINT "QuestionsAnswerVote_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE SET NULL ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "QuestionsAnswerVote" ADD CONSTRAINT "QuestionsAnswerVote_answerId_fkey" FOREIGN KEY ("answerId") REFERENCES "QuestionsAnswer"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "QuestionsAnswerComment" ADD CONSTRAINT "QuestionsAnswerComment_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE SET NULL ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "QuestionsAnswerComment" ADD CONSTRAINT "QuestionsAnswerComment_answerId_fkey" FOREIGN KEY ("answerId") REFERENCES "QuestionsAnswer"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "QuestionsAnswerCommentVote" ADD CONSTRAINT "QuestionsAnswerCommentVote_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE SET NULL ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "QuestionsAnswerCommentVote" ADD CONSTRAINT "QuestionsAnswerCommentVote_answerCommentId_fkey" FOREIGN KEY ("answerCommentId") REFERENCES "QuestionsAnswerComment"("id") ON DELETE CASCADE ON UPDATE CASCADE;

View File

@ -0,0 +1,73 @@
/*
Warnings:
- You are about to drop the column `resumesProfileId` on the `ResumesComment` table. All the data in the column will be lost.
- You are about to drop the column `resumesProfileId` on the `ResumesCommentVote` table. All the data in the column will be lost.
- You are about to drop the column `resumesProfileId` on the `ResumesResume` table. All the data in the column will be lost.
- You are about to drop the column `resumesProfileId` on the `ResumesStar` table. All the data in the column will be lost.
- You are about to drop the `ResumesProfile` table. If the table is not empty, all the data it contains will be lost.
- A unique constraint covering the columns `[userId,commentId]` on the table `ResumesCommentVote` will be added. If there are existing duplicate values, this will fail.
- A unique constraint covering the columns `[userId,resumeId]` on the table `ResumesStar` will be added. If there are existing duplicate values, this will fail.
- Added the required column `userId` to the `ResumesComment` table without a default value. This is not possible if the table is not empty.
- Added the required column `userId` to the `ResumesCommentVote` table without a default value. This is not possible if the table is not empty.
- Added the required column `userId` to the `ResumesResume` table without a default value. This is not possible if the table is not empty.
- Added the required column `userId` to the `ResumesStar` table without a default value. This is not possible if the table is not empty.
*/
-- DropForeignKey
ALTER TABLE "ResumesComment" DROP CONSTRAINT "ResumesComment_resumesProfileId_fkey";
-- DropForeignKey
ALTER TABLE "ResumesCommentVote" DROP CONSTRAINT "ResumesCommentVote_resumesProfileId_fkey";
-- DropForeignKey
ALTER TABLE "ResumesProfile" DROP CONSTRAINT "ResumesProfile_userId_fkey";
-- DropForeignKey
ALTER TABLE "ResumesResume" DROP CONSTRAINT "ResumesResume_resumesProfileId_fkey";
-- DropForeignKey
ALTER TABLE "ResumesStar" DROP CONSTRAINT "ResumesStar_resumesProfileId_fkey";
-- DropIndex
DROP INDEX "ResumesCommentVote_commentId_resumesProfileId_key";
-- DropIndex
DROP INDEX "ResumesStar_resumeId_resumesProfileId_key";
-- AlterTable
ALTER TABLE "ResumesComment" DROP COLUMN "resumesProfileId",
ADD COLUMN "userId" TEXT NOT NULL;
-- AlterTable
ALTER TABLE "ResumesCommentVote" DROP COLUMN "resumesProfileId",
ADD COLUMN "userId" TEXT NOT NULL;
-- AlterTable
ALTER TABLE "ResumesResume" DROP COLUMN "resumesProfileId",
ADD COLUMN "userId" TEXT NOT NULL;
-- AlterTable
ALTER TABLE "ResumesStar" DROP COLUMN "resumesProfileId",
ADD COLUMN "userId" TEXT NOT NULL;
-- DropTable
DROP TABLE "ResumesProfile";
-- CreateIndex
CREATE UNIQUE INDEX "ResumesCommentVote_userId_commentId_key" ON "ResumesCommentVote"("userId", "commentId");
-- CreateIndex
CREATE UNIQUE INDEX "ResumesStar_userId_resumeId_key" ON "ResumesStar"("userId", "resumeId");
-- AddForeignKey
ALTER TABLE "ResumesResume" ADD CONSTRAINT "ResumesResume_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "ResumesStar" ADD CONSTRAINT "ResumesStar_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "ResumesComment" ADD CONSTRAINT "ResumesComment_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "ResumesCommentVote" ADD CONSTRAINT "ResumesCommentVote_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE;

View File

@ -0,0 +1,11 @@
/*
Warnings:
- Added the required column `questionType` to the `QuestionsQuestion` table without a default value. This is not possible if the table is not empty.
*/
-- CreateEnum
CREATE TYPE "QuestionsQuestionType" AS ENUM ('CODING', 'SYSTEM_DESIGN', 'BEHAVIORAL');
-- AlterTable
ALTER TABLE "QuestionsQuestion" ADD COLUMN "questionType" "QuestionsQuestionType" NOT NULL;

View File

@ -0,0 +1,12 @@
/*
Warnings:
- Added the required column `company` to the `QuestionsQuestionEncounter` table without a default value. This is not possible if the table is not empty.
- Added the required column `location` to the `QuestionsQuestionEncounter` table without a default value. This is not possible if the table is not empty.
- Added the required column `role` to the `QuestionsQuestionEncounter` table without a default value. This is not possible if the table is not empty.
*/
-- AlterTable
ALTER TABLE "QuestionsQuestionEncounter" ADD COLUMN "company" TEXT NOT NULL,
ADD COLUMN "location" TEXT NOT NULL,
ADD COLUMN "role" TEXT NOT NULL;

View File

@ -0,0 +1,30 @@
/*
Warnings:
- Changed the type of `vote` on the `QuestionsAnswerCommentVote` table. No cast exists, the column would be dropped and recreated, which cannot be done if there is data, since the column is required.
- Changed the type of `vote` on the `QuestionsAnswerVote` table. No cast exists, the column would be dropped and recreated, which cannot be done if there is data, since the column is required.
- Changed the type of `vote` on the `QuestionsQuestionCommentVote` table. No cast exists, the column would be dropped and recreated, which cannot be done if there is data, since the column is required.
- Changed the type of `vote` on the `QuestionsQuestionVote` table. No cast exists, the column would be dropped and recreated, which cannot be done if there is data, since the column is required.
*/
-- CreateEnum
CREATE TYPE "Vote" AS ENUM ('UPVOTE', 'DOWNVOTE');
-- AlterTable
ALTER TABLE "QuestionsAnswerCommentVote" DROP COLUMN "vote",
ADD COLUMN "vote" "Vote" NOT NULL;
-- AlterTable
ALTER TABLE "QuestionsAnswerVote" DROP COLUMN "vote",
ADD COLUMN "vote" "Vote" NOT NULL;
-- AlterTable
ALTER TABLE "QuestionsQuestionCommentVote" DROP COLUMN "vote",
ADD COLUMN "vote" "Vote" NOT NULL;
-- AlterTable
ALTER TABLE "QuestionsQuestionVote" DROP COLUMN "vote",
ADD COLUMN "vote" "Vote" NOT NULL;
-- DropEnum
DROP TYPE "QuestionsVote";

View File

@ -0,0 +1,8 @@
/*
Warnings:
- Added the required column `seenAt` to the `QuestionsQuestionEncounter` table without a default value. This is not possible if the table is not empty.
*/
-- AlterTable
ALTER TABLE "QuestionsQuestionEncounter" ADD COLUMN "seenAt" TIMESTAMP(3) NOT NULL;

View File

@ -0,0 +1,204 @@
-- CreateEnum
CREATE TYPE "JobType" AS ENUM ('INTERN', 'FULLTIME');
-- CreateTable
CREATE TABLE "OffersProfile" (
"id" TEXT NOT NULL,
"profileName" TEXT NOT NULL,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"editToken" TEXT NOT NULL,
"userId" TEXT,
CONSTRAINT "OffersProfile_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "OffersBackground" (
"id" TEXT NOT NULL,
"totalYoe" INTEGER,
"offersProfileId" TEXT NOT NULL,
CONSTRAINT "OffersBackground_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "OffersSpecificYoe" (
"id" TEXT NOT NULL,
"yoe" INTEGER NOT NULL,
"domain" TEXT NOT NULL,
"backgroundId" TEXT NOT NULL,
CONSTRAINT "OffersSpecificYoe_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "OffersExperience" (
"id" TEXT NOT NULL,
"companyId" TEXT,
"jobType" "JobType",
"title" TEXT,
"durationInMonths" INTEGER,
"specialization" TEXT,
"level" TEXT,
"totalCompensationId" TEXT,
"monthlySalaryId" TEXT,
"backgroundId" TEXT NOT NULL,
CONSTRAINT "OffersExperience_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "OffersCurrency" (
"id" TEXT NOT NULL,
"value" INTEGER NOT NULL,
"currency" TEXT NOT NULL,
CONSTRAINT "OffersCurrency_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "OffersEducation" (
"id" TEXT NOT NULL,
"type" TEXT,
"field" TEXT,
"isAttending" BOOLEAN,
"school" TEXT,
"startDate" TIMESTAMP(3),
"endDate" TIMESTAMP(3),
"backgroundId" TEXT NOT NULL,
CONSTRAINT "OffersEducation_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "OffersReply" (
"id" TEXT NOT NULL,
"creator" TEXT NOT NULL,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"message" TEXT NOT NULL,
"replyingToId" TEXT,
"profileId" TEXT NOT NULL,
CONSTRAINT "OffersReply_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "OffersOffer" (
"id" TEXT NOT NULL,
"profileId" TEXT NOT NULL,
"companyId" TEXT NOT NULL,
"monthYearReceived" TIMESTAMP(3) NOT NULL,
"location" TEXT NOT NULL,
"negotiationStrategy" TEXT,
"comments" TEXT,
"jobType" "JobType" NOT NULL,
CONSTRAINT "OffersOffer_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "OffersIntern" (
"offerId" TEXT NOT NULL,
"title" TEXT NOT NULL,
"specialization" TEXT NOT NULL,
"internshipCycle" TEXT NOT NULL,
"startYear" INTEGER NOT NULL,
"monthlySalaryId" TEXT NOT NULL,
CONSTRAINT "OffersIntern_pkey" PRIMARY KEY ("offerId")
);
-- CreateTable
CREATE TABLE "OffersFullTime" (
"offerId" TEXT NOT NULL,
"title" TEXT NOT NULL,
"specialization" TEXT NOT NULL,
"level" TEXT NOT NULL,
"totalCompensationId" TEXT NOT NULL,
"baseSalaryId" TEXT NOT NULL,
"bonusId" TEXT NOT NULL,
"stocksId" TEXT NOT NULL,
CONSTRAINT "OffersFullTime_pkey" PRIMARY KEY ("offerId")
);
-- CreateIndex
CREATE UNIQUE INDEX "OffersBackground_offersProfileId_key" ON "OffersBackground"("offersProfileId");
-- CreateIndex
CREATE UNIQUE INDEX "OffersExperience_totalCompensationId_key" ON "OffersExperience"("totalCompensationId");
-- CreateIndex
CREATE UNIQUE INDEX "OffersExperience_monthlySalaryId_key" ON "OffersExperience"("monthlySalaryId");
-- CreateIndex
CREATE UNIQUE INDEX "OffersIntern_monthlySalaryId_key" ON "OffersIntern"("monthlySalaryId");
-- CreateIndex
CREATE UNIQUE INDEX "OffersFullTime_totalCompensationId_key" ON "OffersFullTime"("totalCompensationId");
-- CreateIndex
CREATE UNIQUE INDEX "OffersFullTime_baseSalaryId_key" ON "OffersFullTime"("baseSalaryId");
-- CreateIndex
CREATE UNIQUE INDEX "OffersFullTime_bonusId_key" ON "OffersFullTime"("bonusId");
-- CreateIndex
CREATE UNIQUE INDEX "OffersFullTime_stocksId_key" ON "OffersFullTime"("stocksId");
-- AddForeignKey
ALTER TABLE "OffersProfile" ADD CONSTRAINT "OffersProfile_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE SET NULL ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "OffersBackground" ADD CONSTRAINT "OffersBackground_offersProfileId_fkey" FOREIGN KEY ("offersProfileId") REFERENCES "OffersProfile"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "OffersSpecificYoe" ADD CONSTRAINT "OffersSpecificYoe_backgroundId_fkey" FOREIGN KEY ("backgroundId") REFERENCES "OffersBackground"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "OffersExperience" ADD CONSTRAINT "OffersExperience_companyId_fkey" FOREIGN KEY ("companyId") REFERENCES "Company"("id") ON DELETE SET NULL ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "OffersExperience" ADD CONSTRAINT "OffersExperience_totalCompensationId_fkey" FOREIGN KEY ("totalCompensationId") REFERENCES "OffersCurrency"("id") ON DELETE SET NULL ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "OffersExperience" ADD CONSTRAINT "OffersExperience_monthlySalaryId_fkey" FOREIGN KEY ("monthlySalaryId") REFERENCES "OffersCurrency"("id") ON DELETE SET NULL ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "OffersExperience" ADD CONSTRAINT "OffersExperience_backgroundId_fkey" FOREIGN KEY ("backgroundId") REFERENCES "OffersBackground"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "OffersEducation" ADD CONSTRAINT "OffersEducation_backgroundId_fkey" FOREIGN KEY ("backgroundId") REFERENCES "OffersBackground"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "OffersReply" ADD CONSTRAINT "OffersReply_replyingToId_fkey" FOREIGN KEY ("replyingToId") REFERENCES "OffersReply"("id") ON DELETE SET NULL ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "OffersReply" ADD CONSTRAINT "OffersReply_profileId_fkey" FOREIGN KEY ("profileId") REFERENCES "OffersProfile"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "OffersOffer" ADD CONSTRAINT "OffersOffer_profileId_fkey" FOREIGN KEY ("profileId") REFERENCES "OffersProfile"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "OffersOffer" ADD CONSTRAINT "OffersOffer_companyId_fkey" FOREIGN KEY ("companyId") REFERENCES "Company"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "OffersIntern" ADD CONSTRAINT "OffersIntern_offerId_fkey" FOREIGN KEY ("offerId") REFERENCES "OffersOffer"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "OffersIntern" ADD CONSTRAINT "OffersIntern_monthlySalaryId_fkey" FOREIGN KEY ("monthlySalaryId") REFERENCES "OffersCurrency"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "OffersFullTime" ADD CONSTRAINT "OffersFullTime_offerId_fkey" FOREIGN KEY ("offerId") REFERENCES "OffersOffer"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "OffersFullTime" ADD CONSTRAINT "OffersFullTime_totalCompensationId_fkey" FOREIGN KEY ("totalCompensationId") REFERENCES "OffersCurrency"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "OffersFullTime" ADD CONSTRAINT "OffersFullTime_baseSalaryId_fkey" FOREIGN KEY ("baseSalaryId") REFERENCES "OffersCurrency"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "OffersFullTime" ADD CONSTRAINT "OffersFullTime_bonusId_fkey" FOREIGN KEY ("bonusId") REFERENCES "OffersCurrency"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "OffersFullTime" ADD CONSTRAINT "OffersFullTime_stocksId_fkey" FOREIGN KEY ("stocksId") REFERENCES "OffersCurrency"("id") ON DELETE RESTRICT ON UPDATE CASCADE;

View File

@ -0,0 +1,13 @@
/*
Warnings:
- You are about to drop the column `company` on the `QuestionsQuestionEncounter` table. All the data in the column will be lost.
- Added the required column `companyId` to the `QuestionsQuestionEncounter` table without a default value. This is not possible if the table is not empty.
*/
-- AlterTable
ALTER TABLE "QuestionsQuestionEncounter" DROP COLUMN "company",
ADD COLUMN "companyId" TEXT NOT NULL;
-- AddForeignKey
ALTER TABLE "QuestionsQuestionEncounter" ADD CONSTRAINT "QuestionsQuestionEncounter_companyId_fkey" FOREIGN KEY ("companyId") REFERENCES "Company"("id") ON DELETE SET NULL ON UPDATE CASCADE;

View File

@ -0,0 +1,120 @@
/*
Warnings:
- You are about to drop the column `isAttending` on the `OffersEducation` table. All the data in the column will be lost.
- The primary key for the `OffersFullTime` table will be changed. If it partially fails, the table could be left without primary key constraint.
- You are about to drop the column `offerId` on the `OffersFullTime` table. All the data in the column will be lost.
- The primary key for the `OffersIntern` table will be changed. If it partially fails, the table could be left without primary key constraint.
- You are about to drop the column `offerId` on the `OffersIntern` table. All the data in the column will be lost.
- A unique constraint covering the columns `[offersInternId]` on the table `OffersOffer` will be added. If there are existing duplicate values, this will fail.
- A unique constraint covering the columns `[offersFullTimeId]` on the table `OffersOffer` will be added. If there are existing duplicate values, this will fail.
- A unique constraint covering the columns `[profileName]` on the table `OffersProfile` will be added. If there are existing duplicate values, this will fail.
- The required column `id` was added to the `OffersFullTime` table with a prisma-level default value. This is not possible if the table is not empty. Please add this column as optional, then populate it before making it required.
- The required column `id` was added to the `OffersIntern` table with a prisma-level default value. This is not possible if the table is not empty. Please add this column as optional, then populate it before making it required.
*/
-- DropForeignKey
ALTER TABLE "OffersBackground" DROP CONSTRAINT "OffersBackground_offersProfileId_fkey";
-- DropForeignKey
ALTER TABLE "OffersEducation" DROP CONSTRAINT "OffersEducation_backgroundId_fkey";
-- DropForeignKey
ALTER TABLE "OffersExperience" DROP CONSTRAINT "OffersExperience_backgroundId_fkey";
-- DropForeignKey
ALTER TABLE "OffersFullTime" DROP CONSTRAINT "OffersFullTime_baseSalaryId_fkey";
-- DropForeignKey
ALTER TABLE "OffersFullTime" DROP CONSTRAINT "OffersFullTime_bonusId_fkey";
-- DropForeignKey
ALTER TABLE "OffersFullTime" DROP CONSTRAINT "OffersFullTime_offerId_fkey";
-- DropForeignKey
ALTER TABLE "OffersFullTime" DROP CONSTRAINT "OffersFullTime_stocksId_fkey";
-- DropForeignKey
ALTER TABLE "OffersFullTime" DROP CONSTRAINT "OffersFullTime_totalCompensationId_fkey";
-- DropForeignKey
ALTER TABLE "OffersIntern" DROP CONSTRAINT "OffersIntern_monthlySalaryId_fkey";
-- DropForeignKey
ALTER TABLE "OffersIntern" DROP CONSTRAINT "OffersIntern_offerId_fkey";
-- DropForeignKey
ALTER TABLE "OffersOffer" DROP CONSTRAINT "OffersOffer_profileId_fkey";
-- DropForeignKey
ALTER TABLE "OffersReply" DROP CONSTRAINT "OffersReply_profileId_fkey";
-- DropForeignKey
ALTER TABLE "OffersSpecificYoe" DROP CONSTRAINT "OffersSpecificYoe_backgroundId_fkey";
-- AlterTable
ALTER TABLE "OffersEducation" DROP COLUMN "isAttending";
-- AlterTable
ALTER TABLE "OffersFullTime" DROP CONSTRAINT "OffersFullTime_pkey",
DROP COLUMN "offerId",
ADD COLUMN "id" TEXT NOT NULL,
ADD CONSTRAINT "OffersFullTime_pkey" PRIMARY KEY ("id");
-- AlterTable
ALTER TABLE "OffersIntern" DROP CONSTRAINT "OffersIntern_pkey",
DROP COLUMN "offerId",
ADD COLUMN "id" TEXT NOT NULL,
ADD CONSTRAINT "OffersIntern_pkey" PRIMARY KEY ("id");
-- AlterTable
ALTER TABLE "OffersOffer" ADD COLUMN "offersFullTimeId" TEXT,
ADD COLUMN "offersInternId" TEXT;
-- CreateIndex
CREATE UNIQUE INDEX "OffersOffer_offersInternId_key" ON "OffersOffer"("offersInternId");
-- CreateIndex
CREATE UNIQUE INDEX "OffersOffer_offersFullTimeId_key" ON "OffersOffer"("offersFullTimeId");
-- CreateIndex
CREATE UNIQUE INDEX "OffersProfile_profileName_key" ON "OffersProfile"("profileName");
-- AddForeignKey
ALTER TABLE "OffersBackground" ADD CONSTRAINT "OffersBackground_offersProfileId_fkey" FOREIGN KEY ("offersProfileId") REFERENCES "OffersProfile"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "OffersSpecificYoe" ADD CONSTRAINT "OffersSpecificYoe_backgroundId_fkey" FOREIGN KEY ("backgroundId") REFERENCES "OffersBackground"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "OffersExperience" ADD CONSTRAINT "OffersExperience_backgroundId_fkey" FOREIGN KEY ("backgroundId") REFERENCES "OffersBackground"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "OffersEducation" ADD CONSTRAINT "OffersEducation_backgroundId_fkey" FOREIGN KEY ("backgroundId") REFERENCES "OffersBackground"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "OffersReply" ADD CONSTRAINT "OffersReply_profileId_fkey" FOREIGN KEY ("profileId") REFERENCES "OffersProfile"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "OffersOffer" ADD CONSTRAINT "OffersOffer_profileId_fkey" FOREIGN KEY ("profileId") REFERENCES "OffersProfile"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "OffersOffer" ADD CONSTRAINT "OffersOffer_offersInternId_fkey" FOREIGN KEY ("offersInternId") REFERENCES "OffersIntern"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "OffersOffer" ADD CONSTRAINT "OffersOffer_offersFullTimeId_fkey" FOREIGN KEY ("offersFullTimeId") REFERENCES "OffersFullTime"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "OffersIntern" ADD CONSTRAINT "OffersIntern_monthlySalaryId_fkey" FOREIGN KEY ("monthlySalaryId") REFERENCES "OffersCurrency"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "OffersFullTime" ADD CONSTRAINT "OffersFullTime_totalCompensationId_fkey" FOREIGN KEY ("totalCompensationId") REFERENCES "OffersCurrency"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "OffersFullTime" ADD CONSTRAINT "OffersFullTime_baseSalaryId_fkey" FOREIGN KEY ("baseSalaryId") REFERENCES "OffersCurrency"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "OffersFullTime" ADD CONSTRAINT "OffersFullTime_bonusId_fkey" FOREIGN KEY ("bonusId") REFERENCES "OffersCurrency"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "OffersFullTime" ADD CONSTRAINT "OffersFullTime_stocksId_fkey" FOREIGN KEY ("stocksId") REFERENCES "OffersCurrency"("id") ON DELETE CASCADE ON UPDATE CASCADE;

View File

@ -0,0 +1,12 @@
/*
Warnings:
- You are about to drop the column `creator` on the `OffersReply` table. All the data in the column will be lost.
*/
-- AlterTable
ALTER TABLE "OffersReply" DROP COLUMN "creator",
ADD COLUMN "userId" TEXT;
-- AddForeignKey
ALTER TABLE "OffersReply" ADD CONSTRAINT "OffersReply_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE SET NULL ON UPDATE CASCADE;

View File

@ -0,0 +1,9 @@
/*
Warnings:
- Changed the type of `value` on the `ResumesCommentVote` table. No cast exists, the column would be dropped and recreated, which cannot be done if there is data, since the column is required.
*/
-- AlterTable
ALTER TABLE "ResumesCommentVote" DROP COLUMN "value",
ADD COLUMN "value" "Vote" NOT NULL;

View File

@ -0,0 +1,60 @@
-- CreateTable
CREATE TABLE "OffersAnalysis" (
"id" TEXT NOT NULL,
"profileId" TEXT NOT NULL,
"offerId" TEXT NOT NULL,
"overallPercentile" INTEGER NOT NULL,
"noOfSimilarOffers" INTEGER NOT NULL,
"companyPercentile" INTEGER NOT NULL,
"noOfSimilarCompanyOffers" INTEGER NOT NULL,
CONSTRAINT "OffersAnalysis_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "_TopOverallOffers" (
"A" TEXT NOT NULL,
"B" TEXT NOT NULL
);
-- CreateTable
CREATE TABLE "_TopCompanyOffers" (
"A" TEXT NOT NULL,
"B" TEXT NOT NULL
);
-- CreateIndex
CREATE UNIQUE INDEX "OffersAnalysis_profileId_key" ON "OffersAnalysis"("profileId");
-- CreateIndex
CREATE UNIQUE INDEX "OffersAnalysis_offerId_key" ON "OffersAnalysis"("offerId");
-- CreateIndex
CREATE UNIQUE INDEX "_TopOverallOffers_AB_unique" ON "_TopOverallOffers"("A", "B");
-- CreateIndex
CREATE INDEX "_TopOverallOffers_B_index" ON "_TopOverallOffers"("B");
-- CreateIndex
CREATE UNIQUE INDEX "_TopCompanyOffers_AB_unique" ON "_TopCompanyOffers"("A", "B");
-- CreateIndex
CREATE INDEX "_TopCompanyOffers_B_index" ON "_TopCompanyOffers"("B");
-- AddForeignKey
ALTER TABLE "OffersAnalysis" ADD CONSTRAINT "OffersAnalysis_profileId_fkey" FOREIGN KEY ("profileId") REFERENCES "OffersProfile"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "OffersAnalysis" ADD CONSTRAINT "OffersAnalysis_offerId_fkey" FOREIGN KEY ("offerId") REFERENCES "OffersOffer"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "_TopOverallOffers" ADD CONSTRAINT "_TopOverallOffers_A_fkey" FOREIGN KEY ("A") REFERENCES "OffersAnalysis"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "_TopOverallOffers" ADD CONSTRAINT "_TopOverallOffers_B_fkey" FOREIGN KEY ("B") REFERENCES "OffersOffer"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "_TopCompanyOffers" ADD CONSTRAINT "_TopCompanyOffers_A_fkey" FOREIGN KEY ("A") REFERENCES "OffersAnalysis"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "_TopCompanyOffers" ADD CONSTRAINT "_TopCompanyOffers_B_fkey" FOREIGN KEY ("B") REFERENCES "OffersOffer"("id") ON DELETE CASCADE ON UPDATE CASCADE;

View File

@ -0,0 +1,3 @@
-- AlterTable
ALTER TABLE "OffersAnalysis" ALTER COLUMN "overallPercentile" SET DATA TYPE DOUBLE PRECISION,
ALTER COLUMN "companyPercentile" SET DATA TYPE DOUBLE PRECISION;

View File

@ -0,0 +1,11 @@
-- DropForeignKey
ALTER TABLE "OffersAnalysis" DROP CONSTRAINT "OffersAnalysis_offerId_fkey";
-- DropForeignKey
ALTER TABLE "OffersAnalysis" DROP CONSTRAINT "OffersAnalysis_profileId_fkey";
-- AddForeignKey
ALTER TABLE "OffersAnalysis" ADD CONSTRAINT "OffersAnalysis_profileId_fkey" FOREIGN KEY ("profileId") REFERENCES "OffersProfile"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "OffersAnalysis" ADD CONSTRAINT "OffersAnalysis_offerId_fkey" FOREIGN KEY ("offerId") REFERENCES "OffersOffer"("id") ON DELETE CASCADE ON UPDATE CASCADE;

View File

@ -0,0 +1,14 @@
/*
Warnings:
- Made the column `totalYoe` on table `OffersBackground` required. This step will fail if there are existing NULL values in that column.
- Made the column `negotiationStrategy` on table `OffersOffer` required. This step will fail if there are existing NULL values in that column.
- Made the column `comments` on table `OffersOffer` required. This step will fail if there are existing NULL values in that column.
*/
-- AlterTable
ALTER TABLE "OffersBackground" ALTER COLUMN "totalYoe" SET NOT NULL;
-- AlterTable
ALTER TABLE "OffersOffer" ALTER COLUMN "negotiationStrategy" SET NOT NULL,
ALTER COLUMN "comments" SET NOT NULL;

View File

@ -0,0 +1,5 @@
-- AlterTable
ALTER TABLE "ResumesComment" ADD COLUMN "parentId" TEXT;
-- AddForeignKey
ALTER TABLE "ResumesComment" ADD CONSTRAINT "ResumesComment_parentId_fkey" FOREIGN KEY ("parentId") REFERENCES "ResumesComment"("id") ON DELETE SET NULL ON UPDATE CASCADE;

View File

@ -0,0 +1,2 @@
-- AlterTable
ALTER TABLE "OffersExperience" ADD COLUMN "location" TEXT;

View File

@ -0,0 +1,12 @@
/*
Warnings:
- Added the required column `upvotes` to the `QuestionsQuestion` table without a default value. This is not possible if the table is not empty.
*/
-- AlterTable
ALTER TABLE "QuestionsQuestion" ADD COLUMN "lastSeenAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
ADD COLUMN "upvotes" INTEGER NOT NULL;
-- AlterTable
ALTER TABLE "QuestionsQuestionEncounter" ADD COLUMN "netVotes" INTEGER NOT NULL DEFAULT 0;

View File

@ -0,0 +1,12 @@
/*
Warnings:
- You are about to drop the column `netVotes` on the `QuestionsQuestionEncounter` table. All the data in the column will be lost.
*/
-- AlterTable
ALTER TABLE "QuestionsQuestion" ALTER COLUMN "lastSeenAt" DROP DEFAULT,
ALTER COLUMN "upvotes" SET DEFAULT 0;
-- AlterTable
ALTER TABLE "QuestionsQuestionEncounter" DROP COLUMN "netVotes";

View File

@ -0,0 +1,5 @@
-- CreateIndex
CREATE INDEX "QuestionsQuestion_lastSeenAt_id_idx" ON "QuestionsQuestion"("lastSeenAt", "id");
-- CreateIndex
CREATE INDEX "QuestionsQuestion_upvotes_id_idx" ON "QuestionsQuestion"("upvotes", "id");

View File

@ -0,0 +1,12 @@
/*
Warnings:
- Added the required column `baseValue` to the `OffersCurrency` table without a default value. This is not possible if the table is not empty.
- Added the required column `updatedAt` to the `OffersCurrency` table without a default value. This is not possible if the table is not empty.
*/
-- AlterTable
ALTER TABLE "OffersCurrency" ADD COLUMN "baseCurrency" TEXT NOT NULL DEFAULT 'USD',
ADD COLUMN "baseValue" INTEGER NOT NULL,
ADD COLUMN "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
ADD COLUMN "updatedAt" TIMESTAMP(3) NOT NULL;

View File

@ -0,0 +1,3 @@
-- AlterTable
ALTER TABLE "OffersCurrency" ALTER COLUMN "value" SET DATA TYPE DOUBLE PRECISION,
ALTER COLUMN "baseValue" SET DATA TYPE DOUBLE PRECISION;

View File

@ -0,0 +1,2 @@
-- AlterTable
ALTER TABLE "QuestionsQuestion" ALTER COLUMN "lastSeenAt" DROP NOT NULL;

View File

@ -0,0 +1,36 @@
-- CreateTable
CREATE TABLE "QuestionsList" (
"id" TEXT NOT NULL,
"userId" TEXT NOT NULL,
"name" VARCHAR(256) NOT NULL,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updatedAt" TIMESTAMP(3) NOT NULL,
CONSTRAINT "QuestionsList_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "QuestionsListQuestionEntry" (
"id" TEXT NOT NULL,
"listId" TEXT NOT NULL,
"questionId" TEXT NOT NULL,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updatedAt" TIMESTAMP(3) NOT NULL,
CONSTRAINT "QuestionsListQuestionEntry_pkey" PRIMARY KEY ("id")
);
-- CreateIndex
CREATE UNIQUE INDEX "QuestionsList_userId_name_key" ON "QuestionsList"("userId", "name");
-- CreateIndex
CREATE UNIQUE INDEX "QuestionsListQuestionEntry_listId_questionId_key" ON "QuestionsListQuestionEntry"("listId", "questionId");
-- AddForeignKey
ALTER TABLE "QuestionsList" ADD CONSTRAINT "QuestionsList_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "QuestionsListQuestionEntry" ADD CONSTRAINT "QuestionsListQuestionEntry_listId_fkey" FOREIGN KEY ("listId") REFERENCES "QuestionsList"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "QuestionsListQuestionEntry" ADD CONSTRAINT "QuestionsListQuestionEntry_questionId_fkey" FOREIGN KEY ("questionId") REFERENCES "QuestionsQuestion"("id") ON DELETE CASCADE ON UPDATE CASCADE;

View File

@ -0,0 +1,2 @@
-- AlterTable
ALTER TABLE "OffersBackground" ALTER COLUMN "totalYoe" SET DEFAULT 0;

View File

@ -0,0 +1,14 @@
/*
Warnings:
- Added the required column `upvotes` to the `QuestionsAnswerComment` table without a default value. This is not possible if the table is not empty.
*/
-- AlterTable
ALTER TABLE "QuestionsAnswer" ADD COLUMN "upvotes" INTEGER NOT NULL DEFAULT 0;
-- AlterTable
ALTER TABLE "QuestionsAnswerComment" ADD COLUMN "upvotes" INTEGER NOT NULL;
-- AlterTable
ALTER TABLE "QuestionsQuestionComment" ADD COLUMN "upvotes" INTEGER NOT NULL DEFAULT 0;

View File

@ -0,0 +1,2 @@
-- AlterTable
ALTER TABLE "QuestionsAnswerComment" ALTER COLUMN "upvotes" SET DEFAULT 0;

View File

@ -0,0 +1,19 @@
/*
Warnings:
- You are about to drop the column `specialization` on the `OffersExperience` table. All the data in the column will be lost.
- You are about to drop the column `specialization` on the `OffersFullTime` table. All the data in the column will be lost.
- You are about to drop the column `specialization` on the `OffersIntern` table. All the data in the column will be lost.
*/
-- AlterTable
ALTER TABLE "OffersExperience" DROP COLUMN "specialization";
-- AlterTable
ALTER TABLE "OffersFullTime" DROP COLUMN "specialization",
ALTER COLUMN "baseSalaryId" DROP NOT NULL,
ALTER COLUMN "bonusId" DROP NOT NULL,
ALTER COLUMN "stocksId" DROP NOT NULL;
-- AlterTable
ALTER TABLE "OffersIntern" DROP COLUMN "specialization";

View File

@ -0,0 +1,2 @@
-- AlterTable
ALTER TABLE "ResumesResume" ADD COLUMN "isResolved" BOOLEAN NOT NULL DEFAULT false;

View File

@ -0,0 +1,5 @@
-- AlterTable
ALTER TABLE "QuestionsQuestion" ADD COLUMN "numEncounters" INTEGER NOT NULL DEFAULT 0;
-- CreateIndex
CREATE INDEX "QuestionsQuestion_numEncounters_id_idx" ON "QuestionsQuestion"("numEncounters", "id");

View File

@ -0,0 +1,44 @@
-- CreateTable
CREATE TABLE "Country" (
"id" TEXT NOT NULL,
"name" TEXT NOT NULL,
"code" TEXT NOT NULL,
CONSTRAINT "Country_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "State" (
"id" TEXT NOT NULL,
"name" TEXT NOT NULL,
"countryId" TEXT NOT NULL,
CONSTRAINT "State_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "City" (
"id" TEXT NOT NULL,
"name" TEXT NOT NULL,
"stateId" TEXT NOT NULL,
CONSTRAINT "City_pkey" PRIMARY KEY ("id")
);
-- CreateIndex
CREATE UNIQUE INDEX "Country_name_key" ON "Country"("name");
-- CreateIndex
CREATE UNIQUE INDEX "Country_code_key" ON "Country"("code");
-- CreateIndex
CREATE UNIQUE INDEX "State_name_countryId_key" ON "State"("name", "countryId");
-- CreateIndex
CREATE UNIQUE INDEX "City_name_stateId_key" ON "City"("name", "stateId");
-- AddForeignKey
ALTER TABLE "State" ADD CONSTRAINT "State_countryId_fkey" FOREIGN KEY ("countryId") REFERENCES "Country"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "City" ADD CONSTRAINT "City_stateId_fkey" FOREIGN KEY ("stateId") REFERENCES "State"("id") ON DELETE RESTRICT ON UPDATE CASCADE;

View File

@ -0,0 +1,39 @@
/*
Warnings:
- You are about to drop the column `location` on the `QuestionsQuestionEncounter` table. All the data in the column will be lost.
*/
-- AlterTable
ALTER TABLE "QuestionsQuestionEncounter" DROP COLUMN "location",
ADD COLUMN "cityId" TEXT,
ADD COLUMN "countryId" TEXT,
ADD COLUMN "stateId" TEXT,
ALTER COLUMN "companyId" DROP NOT NULL;
-- CreateIndex
CREATE INDEX "QuestionsAnswer_updatedAt_id_idx" ON "QuestionsAnswer"("updatedAt", "id");
-- CreateIndex
CREATE INDEX "QuestionsAnswer_upvotes_id_idx" ON "QuestionsAnswer"("upvotes", "id");
-- CreateIndex
CREATE INDEX "QuestionsAnswerComment_updatedAt_id_idx" ON "QuestionsAnswerComment"("updatedAt", "id");
-- CreateIndex
CREATE INDEX "QuestionsAnswerComment_upvotes_id_idx" ON "QuestionsAnswerComment"("upvotes", "id");
-- CreateIndex
CREATE INDEX "QuestionsQuestionComment_updatedAt_id_idx" ON "QuestionsQuestionComment"("updatedAt", "id");
-- CreateIndex
CREATE INDEX "QuestionsQuestionComment_upvotes_id_idx" ON "QuestionsQuestionComment"("upvotes", "id");
-- AddForeignKey
ALTER TABLE "QuestionsQuestionEncounter" ADD CONSTRAINT "QuestionsQuestionEncounter_countryId_fkey" FOREIGN KEY ("countryId") REFERENCES "Country"("id") ON DELETE SET NULL ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "QuestionsQuestionEncounter" ADD CONSTRAINT "QuestionsQuestionEncounter_stateId_fkey" FOREIGN KEY ("stateId") REFERENCES "State"("id") ON DELETE SET NULL ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "QuestionsQuestionEncounter" ADD CONSTRAINT "QuestionsQuestionEncounter_cityId_fkey" FOREIGN KEY ("cityId") REFERENCES "City"("id") ON DELETE SET NULL ON UPDATE CASCADE;

View File

@ -0,0 +1,2 @@
-- AlterEnum
ALTER TYPE "QuestionsQuestionType" ADD VALUE 'THEORY';

View File

@ -0,0 +1,113 @@
/*
Warnings:
- You are about to drop the column `companyPercentile` on the `OffersAnalysis` table. All the data in the column will be lost.
- You are about to drop the column `noOfSimilarCompanyOffers` on the `OffersAnalysis` table. All the data in the column will be lost.
- You are about to drop the column `noOfSimilarOffers` on the `OffersAnalysis` table. All the data in the column will be lost.
- You are about to drop the column `overallPercentile` on the `OffersAnalysis` table. All the data in the column will be lost.
- You are about to drop the column `userId` on the `OffersProfile` table. All the data in the column will be lost.
- You are about to drop the `_TopCompanyOffers` table. If the table is not empty, all the data it contains will be lost.
- You are about to drop the `_TopOverallOffers` table. If the table is not empty, all the data it contains will be lost.
- Added the required column `overallAnalysisUnitId` to the `OffersAnalysis` table without a default value. This is not possible if the table is not empty.
- Added the required column `updatedAt` to the `OffersAnalysis` table without a default value. This is not possible if the table is not empty.
*/
-- DropForeignKey
ALTER TABLE "OffersProfile" DROP CONSTRAINT "OffersProfile_userId_fkey";
-- DropForeignKey
ALTER TABLE "_TopCompanyOffers" DROP CONSTRAINT "_TopCompanyOffers_A_fkey";
-- DropForeignKey
ALTER TABLE "_TopCompanyOffers" DROP CONSTRAINT "_TopCompanyOffers_B_fkey";
-- DropForeignKey
ALTER TABLE "_TopOverallOffers" DROP CONSTRAINT "_TopOverallOffers_A_fkey";
-- DropForeignKey
ALTER TABLE "_TopOverallOffers" DROP CONSTRAINT "_TopOverallOffers_B_fkey";
-- AlterTable
ALTER TABLE "OffersAnalysis" DROP COLUMN "companyPercentile",
DROP COLUMN "noOfSimilarCompanyOffers",
DROP COLUMN "noOfSimilarOffers",
DROP COLUMN "overallPercentile",
ADD COLUMN "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
ADD COLUMN "overallAnalysisUnitId" TEXT NOT NULL,
ADD COLUMN "updatedAt" TIMESTAMP(3) NOT NULL;
-- AlterTable
ALTER TABLE "OffersProfile" DROP COLUMN "userId";
-- DropTable
DROP TABLE "_TopCompanyOffers";
-- DropTable
DROP TABLE "_TopOverallOffers";
-- CreateTable
CREATE TABLE "OffersAnalysisUnit" (
"id" TEXT NOT NULL,
"companyName" TEXT NOT NULL,
"percentile" DOUBLE PRECISION NOT NULL,
"noOfSimilarOffers" INTEGER NOT NULL,
CONSTRAINT "OffersAnalysisUnit_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "_OffersProfileToUser" (
"A" TEXT NOT NULL,
"B" TEXT NOT NULL
);
-- CreateTable
CREATE TABLE "_CompanyAnalysis" (
"A" TEXT NOT NULL,
"B" TEXT NOT NULL
);
-- CreateTable
CREATE TABLE "_OffersAnalysisUnitToOffersOffer" (
"A" TEXT NOT NULL,
"B" TEXT NOT NULL
);
-- CreateIndex
CREATE UNIQUE INDEX "_OffersProfileToUser_AB_unique" ON "_OffersProfileToUser"("A", "B");
-- CreateIndex
CREATE INDEX "_OffersProfileToUser_B_index" ON "_OffersProfileToUser"("B");
-- CreateIndex
CREATE UNIQUE INDEX "_CompanyAnalysis_AB_unique" ON "_CompanyAnalysis"("A", "B");
-- CreateIndex
CREATE INDEX "_CompanyAnalysis_B_index" ON "_CompanyAnalysis"("B");
-- CreateIndex
CREATE UNIQUE INDEX "_OffersAnalysisUnitToOffersOffer_AB_unique" ON "_OffersAnalysisUnitToOffersOffer"("A", "B");
-- CreateIndex
CREATE INDEX "_OffersAnalysisUnitToOffersOffer_B_index" ON "_OffersAnalysisUnitToOffersOffer"("B");
-- AddForeignKey
ALTER TABLE "OffersAnalysis" ADD CONSTRAINT "OffersAnalysis_overallAnalysisUnitId_fkey" FOREIGN KEY ("overallAnalysisUnitId") REFERENCES "OffersAnalysisUnit"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "_OffersProfileToUser" ADD CONSTRAINT "_OffersProfileToUser_A_fkey" FOREIGN KEY ("A") REFERENCES "OffersProfile"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "_OffersProfileToUser" ADD CONSTRAINT "_OffersProfileToUser_B_fkey" FOREIGN KEY ("B") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "_CompanyAnalysis" ADD CONSTRAINT "_CompanyAnalysis_A_fkey" FOREIGN KEY ("A") REFERENCES "OffersAnalysis"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "_CompanyAnalysis" ADD CONSTRAINT "_CompanyAnalysis_B_fkey" FOREIGN KEY ("B") REFERENCES "OffersAnalysisUnit"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "_OffersAnalysisUnitToOffersOffer" ADD CONSTRAINT "_OffersAnalysisUnitToOffersOffer_A_fkey" FOREIGN KEY ("A") REFERENCES "OffersAnalysisUnit"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "_OffersAnalysisUnitToOffersOffer" ADD CONSTRAINT "_OffersAnalysisUnitToOffersOffer_B_fkey" FOREIGN KEY ("B") REFERENCES "OffersOffer"("id") ON DELETE CASCADE ON UPDATE CASCADE;

View File

@ -0,0 +1,21 @@
/*
Warnings:
- You are about to drop the column `location` on the `OffersExperience` table. All the data in the column will be lost.
- You are about to drop the column `location` on the `OffersOffer` table. All the data in the column will be lost.
- Added the required column `cityId` to the `OffersOffer` table without a default value. This is not possible if the table is not empty.
*/
-- AlterTable
ALTER TABLE "OffersExperience" DROP COLUMN "location",
ADD COLUMN "cityId" TEXT;
-- AlterTable
ALTER TABLE "OffersOffer" DROP COLUMN "location",
ADD COLUMN "cityId" TEXT NOT NULL;
-- AddForeignKey
ALTER TABLE "OffersExperience" ADD CONSTRAINT "OffersExperience_cityId_fkey" FOREIGN KEY ("cityId") REFERENCES "City"("id") ON DELETE SET NULL ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "OffersOffer" ADD CONSTRAINT "OffersOffer_cityId_fkey" FOREIGN KEY ("cityId") REFERENCES "City"("id") ON DELETE RESTRICT ON UPDATE CASCADE;

View File

@ -0,0 +1,13 @@
/*
Warnings:
- You are about to drop the column `companyName` on the `OffersAnalysisUnit` table. All the data in the column will be lost.
- Added the required column `companyId` to the `OffersAnalysisUnit` table without a default value. This is not possible if the table is not empty.
*/
-- AlterTable
ALTER TABLE "OffersAnalysisUnit" DROP COLUMN "companyName",
ADD COLUMN "companyId" TEXT NOT NULL;
-- AddForeignKey
ALTER TABLE "OffersAnalysisUnit" ADD CONSTRAINT "OffersAnalysisUnit_companyId_fkey" FOREIGN KEY ("companyId") REFERENCES "Company"("id") ON DELETE RESTRICT ON UPDATE CASCADE;

View File

@ -0,0 +1,16 @@
/*
Warnings:
- You are about to drop the column `companyId` on the `OffersAnalysisUnit` table. All the data in the column will be lost.
- Added the required column `analysedOfferId` to the `OffersAnalysisUnit` table without a default value. This is not possible if the table is not empty.
*/
-- DropForeignKey
ALTER TABLE "OffersAnalysisUnit" DROP CONSTRAINT "OffersAnalysisUnit_companyId_fkey";
-- AlterTable
ALTER TABLE "OffersAnalysisUnit" DROP COLUMN "companyId",
ADD COLUMN "analysedOfferId" TEXT NOT NULL;
-- AddForeignKey
ALTER TABLE "OffersAnalysisUnit" ADD CONSTRAINT "OffersAnalysisUnit_analysedOfferId_fkey" FOREIGN KEY ("analysedOfferId") REFERENCES "OffersOffer"("id") ON DELETE RESTRICT ON UPDATE CASCADE;

View File

@ -0,0 +1,5 @@
-- DropForeignKey
ALTER TABLE "OffersAnalysisUnit" DROP CONSTRAINT "OffersAnalysisUnit_analysedOfferId_fkey";
-- AddForeignKey
ALTER TABLE "OffersAnalysisUnit" ADD CONSTRAINT "OffersAnalysisUnit_analysedOfferId_fkey" FOREIGN KEY ("analysedOfferId") REFERENCES "OffersOffer"("id") ON DELETE CASCADE ON UPDATE CASCADE;

View File

@ -0,0 +1,5 @@
-- DropForeignKey
ALTER TABLE "OffersAnalysis" DROP CONSTRAINT "OffersAnalysis_overallAnalysisUnitId_fkey";
-- AddForeignKey
ALTER TABLE "OffersAnalysis" ADD CONSTRAINT "OffersAnalysis_overallAnalysisUnitId_fkey" FOREIGN KEY ("overallAnalysisUnitId") REFERENCES "OffersAnalysisUnit"("id") ON DELETE CASCADE ON UPDATE CASCADE;

View File

@ -0,0 +1,13 @@
/*
Warnings:
- You are about to drop the column `location` on the `ResumesResume` table. All the data in the column will be lost.
- Added the required column `locationId` to the `ResumesResume` table without a default value. This is not possible if the table is not empty.
*/
-- AlterTable. Set default location to Singapore.
ALTER TABLE "ResumesResume" DROP COLUMN "location",
ADD COLUMN "locationId" TEXT NOT NULL DEFAULT '196';
-- AddForeignKey
ALTER TABLE "ResumesResume" ADD CONSTRAINT "ResumesResume_locationId_fkey" FOREIGN KEY ("locationId") REFERENCES "Country"("id") ON DELETE CASCADE ON UPDATE CASCADE;

View File

@ -0,0 +1,2 @@
-- AlterTable
ALTER TABLE "ResumesResume" ALTER COLUMN "locationId" DROP DEFAULT;

View File

@ -0,0 +1,2 @@
-- AlterTable
ALTER TABLE "Country" ADD COLUMN "ranking" INTEGER DEFAULT 0;

View File

@ -0,0 +1,2 @@
-- AlterTable
ALTER TABLE "Company" ADD COLUMN "website" TEXT;

View File

@ -0,0 +1,5 @@
-- DropForeignKey
ALTER TABLE "ResumesComment" DROP CONSTRAINT "ResumesComment_parentId_fkey";
-- AddForeignKey
ALTER TABLE "ResumesComment" ADD CONSTRAINT "ResumesComment_parentId_fkey" FOREIGN KEY ("parentId") REFERENCES "ResumesComment"("id") ON DELETE CASCADE ON UPDATE CASCADE;

View File

@ -0,0 +1,5 @@
-- AlterTable
ALTER TABLE "City" ADD COLUMN "ranking" INTEGER DEFAULT 0;
-- AlterTable
ALTER TABLE "Company" ADD COLUMN "ranking" INTEGER DEFAULT 0;

View File

@ -0,0 +1,13 @@
-- CreateTable
CREATE TABLE "OffersAdmin" (
"id" TEXT NOT NULL,
"userId" TEXT NOT NULL,
CONSTRAINT "OffersAdmin_pkey" PRIMARY KEY ("id")
);
-- CreateIndex
CREATE UNIQUE INDEX "OffersAdmin_userId_key" ON "OffersAdmin"("userId");
-- AddForeignKey
ALTER TABLE "OffersAdmin" ADD CONSTRAINT "OffersAdmin_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE;

View File

@ -0,0 +1,3 @@
# Please do not edit this file manually
# It should be added in your version-control system (i.e. Git)
provider = "postgresql"

Binary file not shown.

View File

@ -0,0 +1,640 @@
// Refer to the Prisma schema docs: https://pris.ly/d/prisma-schema
generator client {
provider = "prisma-client-js"
previewFeatures = ["interactiveTransactions"]
}
datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
}
// Necessary for NextAuth.
model Account {
id String @id @default(cuid())
userId String
type String
provider String
providerAccountId String
refresh_token String? @db.Text
access_token String? @db.Text
expires_at Int?
token_type String?
scope String?
id_token String? @db.Text
session_state String?
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
@@unique([provider, providerAccountId])
}
model Session {
id String @id @default(cuid())
sessionToken String @unique
userId String
expires DateTime
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
}
model User {
id String @id @default(cuid())
name String?
email String? @unique
emailVerified DateTime?
image String?
accounts Account[]
sessions Session[]
todos Todo[]
resumesResumes ResumesResume[]
resumesStars ResumesStar[]
resumesComments ResumesComment[]
resumesCommentVotes ResumesCommentVote[]
questionsQuestions QuestionsQuestion[]
questionsQuestionEncounters QuestionsQuestionEncounter[]
questionsQuestionVotes QuestionsQuestionVote[]
questionsQuestionComments QuestionsQuestionComment[]
questionsQuestionCommentVotes QuestionsQuestionCommentVote[]
questionsAnswers QuestionsAnswer[]
questionsAnswerVotes QuestionsAnswerVote[]
questionsAnswerComments QuestionsAnswerComment[]
questionsAnswerCommentVotes QuestionsAnswerCommentVote[]
OffersProfile OffersProfile[]
offersDiscussion OffersReply[]
questionsLists QuestionsList[]
OffersAdmin OffersAdmin?
}
enum Vote {
UPVOTE
DOWNVOTE
}
model VerificationToken {
identifier String
token String @unique
expires DateTime
@@unique([identifier, token])
}
model Todo {
id String @id @default(cuid())
userId String
text String @db.Text
status TodoStatus @default(INCOMPLETE)
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
}
enum TodoStatus {
INCOMPLETE
COMPLETE
}
model Company {
id String @id @default(cuid())
name String @db.Text
slug String @unique
description String? @db.Text
logoUrl String?
website String?
// The higher the value of the ranking, the higher it appears in the search results.
ranking Int? @default(0)
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
questionsQuestionEncounter QuestionsQuestionEncounter[]
OffersExperience OffersExperience[]
OffersOffer OffersOffer[]
}
model Country {
id String @id
name String @unique
code String @unique
// The higher the value of the ranking, the higher it appears in the search results.
ranking Int? @default(0)
states State[]
questionsQuestionEncounters QuestionsQuestionEncounter[]
ResumesResume ResumesResume[]
}
model State {
id String @id
name String
countryId String
cities City[]
country Country @relation(fields: [countryId], references: [id])
questionsQuestionEncounters QuestionsQuestionEncounter[]
@@unique([name, countryId])
}
model City {
id String @id
name String
stateId String
// The higher the value of the ranking, the higher it appears in the search results.
ranking Int? @default(0)
state State @relation(fields: [stateId], references: [id])
questionsQuestionEncounters QuestionsQuestionEncounter[]
OffersExperience OffersExperience[]
OffersOffer OffersOffer[]
@@unique([name, stateId])
}
// Start of Resumes project models.
// Add Resumes project models here, prefix all models with "Resumes",
// use camelCase for field names, and try to name them consistently
// across all models in this file.
model ResumesResume {
id String @id @default(cuid())
userId String
title String @db.Text
role String @db.Text
experience String @db.Text
locationId String
url String
additionalInfo String? @db.Text
isResolved Boolean @default(false)
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
location Country @relation(fields: [locationId], references: [id], onDelete: Cascade)
stars ResumesStar[]
comments ResumesComment[]
}
model ResumesStar {
id String @id @default(cuid())
userId String
resumeId String
createdAt DateTime @default(now())
resume ResumesResume @relation(fields: [resumeId], references: [id], onDelete: Cascade)
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
@@unique([userId, resumeId])
}
model ResumesComment {
id String @id @default(cuid())
userId String
resumeId String
parentId String?
description String @db.Text
section ResumesSection
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
resume ResumesResume @relation(fields: [resumeId], references: [id], onDelete: Cascade)
votes ResumesCommentVote[]
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
parent ResumesComment? @relation("parentComment", fields: [parentId], references: [id], onDelete: Cascade)
children ResumesComment[] @relation("parentComment")
}
enum ResumesSection {
GENERAL
EDUCATION
EXPERIENCE
PROJECTS
SKILLS
}
model ResumesCommentVote {
id String @id @default(cuid())
userId String
commentId String
value Vote
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
comment ResumesComment @relation(fields: [commentId], references: [id], onDelete: Cascade)
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
@@unique([userId, commentId])
}
// End of Resumes project models.
// Start of Offers project models.
// Add Offers project models here, prefix all models with "Offer",
// use camelCase for field names, and try to name them consistently
// across all models in this file.
model OffersProfile {
id String @id @default(cuid())
profileName String @unique
createdAt DateTime @default(now())
background OffersBackground?
editToken String
discussion OffersReply[]
offers OffersOffer[]
users User[]
analysis OffersAnalysis?
}
model OffersAdmin {
id String @id @default(cuid())
userId String @unique
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
}
model OffersBackground {
id String @id @default(cuid())
totalYoe Int @default(0)
specificYoes OffersSpecificYoe[]
experiences OffersExperience[]
educations OffersEducation[]
profile OffersProfile @relation(fields: [offersProfileId], references: [id], onDelete: Cascade)
offersProfileId String @unique
}
model OffersSpecificYoe {
id String @id @default(cuid())
yoe Int
domain String
background OffersBackground @relation(fields: [backgroundId], references: [id], onDelete: Cascade)
backgroundId String
}
model OffersExperience {
id String @id @default(cuid())
company Company? @relation(fields: [companyId], references: [id])
companyId String?
jobType JobType?
title String?
// Add more fields
durationInMonths Int?
location City? @relation(fields: [cityId], references: [id])
cityId String?
// FULLTIME fields
level String?
totalCompensation OffersCurrency? @relation("ExperienceTotalCompensation", fields: [totalCompensationId], references: [id])
totalCompensationId String? @unique
// INTERN fields
monthlySalary OffersCurrency? @relation("ExperienceMonthlySalary", fields: [monthlySalaryId], references: [id])
monthlySalaryId String? @unique
background OffersBackground @relation(fields: [backgroundId], references: [id], onDelete: Cascade)
backgroundId String
}
model OffersCurrency {
id String @id @default(cuid())
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
value Float
currency String
baseValue Float
baseCurrency String @default("USD")
// Experience
OffersExperienceTotalCompensation OffersExperience? @relation("ExperienceTotalCompensation")
OffersExperienceMonthlySalary OffersExperience? @relation("ExperienceMonthlySalary")
// Full Time
OffersTotalCompensation OffersFullTime? @relation("OfferTotalCompensation")
OffersBaseSalary OffersFullTime? @relation("OfferBaseSalary")
OffersBonus OffersFullTime? @relation("OfferBonus")
OffersStocks OffersFullTime? @relation("OfferStocks")
// Intern
OffersMonthlySalary OffersIntern?
}
enum JobType {
INTERN
FULLTIME
}
model OffersEducation {
id String @id @default(cuid())
type String?
field String?
school String?
startDate DateTime?
endDate DateTime?
background OffersBackground @relation(fields: [backgroundId], references: [id], onDelete: Cascade)
backgroundId String
}
model OffersReply {
id String @id @default(cuid())
createdAt DateTime @default(now())
message String
replyingToId String?
replyingTo OffersReply? @relation("ReplyThread", fields: [replyingToId], references: [id])
replies OffersReply[] @relation("ReplyThread")
profile OffersProfile @relation(fields: [profileId], references: [id], onDelete: Cascade)
profileId String
user User? @relation(fields: [userId], references: [id])
userId String?
}
model OffersOffer {
id String @id @default(cuid())
profile OffersProfile @relation(fields: [profileId], references: [id], onDelete: Cascade)
profileId String
company Company @relation(fields: [companyId], references: [id])
companyId String
location City @relation(fields: [cityId], references: [id])
cityId String
monthYearReceived DateTime
negotiationStrategy String
comments String
jobType JobType
offersIntern OffersIntern? @relation(fields: [offersInternId], references: [id], onDelete: Cascade)
offersInternId String? @unique
offersFullTime OffersFullTime? @relation(fields: [offersFullTimeId], references: [id], onDelete: Cascade)
offersFullTimeId String? @unique
offersAnalysis OffersAnalysis? @relation("HighestOverallOffer")
offersAnalysisUnit OffersAnalysisUnit[]
OffersAnalysisUnit OffersAnalysisUnit[] @relation("Analysed Offer")
}
model OffersIntern {
id String @id @default(cuid())
title String
internshipCycle String
startYear Int
monthlySalary OffersCurrency @relation(fields: [monthlySalaryId], references: [id], onDelete: Cascade)
monthlySalaryId String @unique
OffersOffer OffersOffer?
}
model OffersFullTime {
id String @id @default(cuid())
title String
level String
totalCompensation OffersCurrency @relation("OfferTotalCompensation", fields: [totalCompensationId], references: [id], onDelete: Cascade)
totalCompensationId String @unique
baseSalary OffersCurrency? @relation("OfferBaseSalary", fields: [baseSalaryId], references: [id], onDelete: Cascade)
baseSalaryId String? @unique
bonus OffersCurrency? @relation("OfferBonus", fields: [bonusId], references: [id], onDelete: Cascade)
bonusId String? @unique
stocks OffersCurrency? @relation("OfferStocks", fields: [stocksId], references: [id], onDelete: Cascade)
stocksId String? @unique
OffersOffer OffersOffer?
}
model OffersAnalysis {
id String @id @default(cuid())
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
profile OffersProfile @relation(fields: [profileId], references: [id], onDelete: Cascade)
profileId String @unique
overallHighestOffer OffersOffer @relation("HighestOverallOffer", fields: [offerId], references: [id], onDelete: Cascade)
offerId String @unique
// OVERALL
overallAnalysis OffersAnalysisUnit @relation("OverallAnalysis", fields: [overallAnalysisUnitId], references: [id], onDelete: Cascade)
overallAnalysisUnitId String
companyAnalysis OffersAnalysisUnit[] @relation("CompanyAnalysis")
}
model OffersAnalysisUnit {
id String @id @default(cuid())
analysedOffer OffersOffer @relation("Analysed Offer", fields: [analysedOfferId], references: [id], onDelete: Cascade)
analysedOfferId String
percentile Float
noOfSimilarOffers Int
topSimilarOffers OffersOffer[]
offersAnalysisOverall OffersAnalysis[] @relation("OverallAnalysis")
offersAnalysisCompany OffersAnalysis[] @relation("CompanyAnalysis")
}
// End of Offers project models.
// Start of Questions project models.
// Add Questions project models here, prefix all models with "Questions",
// use camelCase for field names, and try to name them consistently
// across all models in this file.
enum QuestionsQuestionType {
CODING
SYSTEM_DESIGN
BEHAVIORAL
THEORY
}
model QuestionsQuestion {
id String @id @default(cuid())
userId String?
content String @db.Text
questionType QuestionsQuestionType
lastSeenAt DateTime?
upvotes Int @default(0)
numEncounters Int @default(0)
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
user User? @relation(fields: [userId], references: [id], onDelete: SetNull)
encounters QuestionsQuestionEncounter[]
votes QuestionsQuestionVote[]
comments QuestionsQuestionComment[]
answers QuestionsAnswer[]
questionsListQuestionEntries QuestionsListQuestionEntry[]
@@index([lastSeenAt, id])
@@index([numEncounters, id])
@@index([upvotes, id])
}
model QuestionsQuestionEncounter {
id String @id @default(cuid())
questionId String
userId String?
companyId String?
countryId String?
stateId String?
cityId String?
role String @db.Text
seenAt DateTime
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
country Country? @relation(fields: [countryId], references: [id], onDelete: SetNull)
state State? @relation(fields: [stateId], references: [id], onDelete: SetNull)
city City? @relation(fields: [cityId], references: [id], onDelete: SetNull)
company Company? @relation(fields: [companyId], references: [id], onDelete: SetNull)
user User? @relation(fields: [userId], references: [id], onDelete: SetNull)
question QuestionsQuestion @relation(fields: [questionId], references: [id], onDelete: Cascade)
}
model QuestionsQuestionVote {
id String @id @default(cuid())
questionId String
userId String?
vote Vote
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
user User? @relation(fields: [userId], references: [id], onDelete: SetNull)
question QuestionsQuestion @relation(fields: [questionId], references: [id], onDelete: Cascade)
@@unique([questionId, userId])
}
model QuestionsQuestionComment {
id String @id @default(cuid())
questionId String
userId String?
upvotes Int @default(0)
content String @db.Text
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
user User? @relation(fields: [userId], references: [id], onDelete: SetNull)
question QuestionsQuestion @relation(fields: [questionId], references: [id], onDelete: Cascade)
votes QuestionsQuestionCommentVote[]
@@index([updatedAt, id])
@@index([upvotes, id])
}
model QuestionsQuestionCommentVote {
id String @id @default(cuid())
questionCommentId String
userId String?
vote Vote
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
user User? @relation(fields: [userId], references: [id], onDelete: SetNull)
comment QuestionsQuestionComment @relation(fields: [questionCommentId], references: [id], onDelete: Cascade)
@@unique([questionCommentId, userId])
}
model QuestionsAnswer {
id String @id @default(cuid())
questionId String
userId String?
content String @db.Text
upvotes Int @default(0)
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
user User? @relation(fields: [userId], references: [id], onDelete: SetNull)
question QuestionsQuestion @relation(fields: [questionId], references: [id], onDelete: Cascade)
votes QuestionsAnswerVote[]
comments QuestionsAnswerComment[]
@@index([updatedAt, id])
@@index([upvotes, id])
}
model QuestionsAnswerVote {
id String @id @default(cuid())
answerId String
userId String?
vote Vote
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
user User? @relation(fields: [userId], references: [id], onDelete: SetNull)
answer QuestionsAnswer @relation(fields: [answerId], references: [id], onDelete: Cascade)
@@unique([answerId, userId])
}
model QuestionsAnswerComment {
id String @id @default(cuid())
answerId String
userId String?
content String @db.Text
upvotes Int @default(0)
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
user User? @relation(fields: [userId], references: [id], onDelete: SetNull)
answer QuestionsAnswer @relation(fields: [answerId], references: [id], onDelete: Cascade)
votes QuestionsAnswerCommentVote[]
@@index([updatedAt, id])
@@index([upvotes, id])
}
model QuestionsAnswerCommentVote {
id String @id @default(cuid())
answerCommentId String
userId String?
vote Vote
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
user User? @relation(fields: [userId], references: [id], onDelete: SetNull)
comment QuestionsAnswerComment @relation(fields: [answerCommentId], references: [id], onDelete: Cascade)
@@unique([answerCommentId, userId])
}
model QuestionsList {
id String @id @default(cuid())
userId String
name String @db.VarChar(256)
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
questionEntries QuestionsListQuestionEntry[]
@@unique([userId, name])
}
model QuestionsListQuestionEntry {
id String @id @default(cuid())
listId String
questionId String
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
list QuestionsList @relation(fields: [listId], references: [id], onDelete: Cascade)
question QuestionsQuestion @relation(fields: [questionId], references: [id], onDelete: Cascade)
@@unique([listId, questionId])
}
// End of Questions project models.

View File

@ -0,0 +1,49 @@
import { PrismaClient } from '@prisma/client';
import { generateAnalysis } from '../src/utils/offers/analysis/analysisGeneration';
const prisma = new PrismaClient();
const seedAnalysis = async () => {
console.log('Busy crunching analysis.....');
const profilesWithoutAnalysis = await prisma.offersProfile.findMany({
where: {
analysis: {
is: null,
},
},
});
console.log(
'Number of profiles found without analysis:',
profilesWithoutAnalysis.length,
);
let i = 0;
while (i < profilesWithoutAnalysis.length) {
const profile = profilesWithoutAnalysis[i];
await generateAnalysis({
ctx: { prisma, session: null },
input: { profileId: profile.id },
});
console.log(++i, ': Analysis generated for profile with id', profile.id);
}
console.log(i, 'analysis generated');
};
Promise.all([seedAnalysis()])
.then(async () => {
await prisma.$disconnect();
})
.catch(async (e) => {
console.error(e);
console.log('Analysis stopping!');
await prisma.$disconnect();
process.exit(1);
});
export {};

View File

@ -0,0 +1,37 @@
import * as fs from 'fs';
const { PrismaClient } = require('@prisma/client');
const { parse } = require('csv-parse/sync');
const prisma = new PrismaClient();
async function main() {
console.log('Seeding started...');
const file = fs.readFileSync('prisma/companies.csv');
const companies = parse(file, {
columns: true,
skip_empty_lines: true,
});
console.info('Seeding companies');
await prisma.company.createMany({
data: companies.map((company) => ({
name: company.name,
slug: company.slug,
description: !!company.description ? company.description : undefined,
website: company.website,
logoUrl: company.logoUrl,
})),
skipDuplicates: true,
});
}
main()
.then(async () => {
await prisma.$disconnect();
})
.catch(async (e) => {
console.error(e);
await prisma.$disconnect();
process.exit(1);
});

View File

@ -0,0 +1,217 @@
import { PrismaClient } from '@prisma/client';
import { JobTitleLabels } from '../src/components/shared/JobTitles';
const prisma = new PrismaClient();
type QuestionCreateData = Parameters<
typeof prisma.questionsQuestion.create
>[0]['data'];
function selectRandomRole() {
const roles = Object.keys(JobTitleLabels);
const randomIndex = Math.floor(Math.random() * roles.length);
return roles[randomIndex];
}
function generateRandomDate() {
// Return a date between 2020 and 2022.
const start = new Date(2020, 0, 1);
const end = new Date(2022, 0, 1);
return new Date(
start.getTime() + Math.random() * (end.getTime() - start.getTime()),
);
}
function generateRandomCodingAnswer() {
return CODING_ANSWER_CONTENT[
Math.floor(Math.random() * CODING_ANSWER_CONTENT.length)
];
}
function generateRandomBehavioralAnswer() {
return BEHAVIORAL_ANSWER_CONTENT[
Math.floor(Math.random() * BEHAVIORAL_ANSWER_CONTENT.length)
];
}
const CODING_QUESTION_CONTENT = [
'Given a string, find the length of the longest substring without repeating characters.',
'Given an array of integers, return indices of the two numbers such that they add up to a specific target.',
'Given a contiguous sequence of numbers in which each number repeats thrice, there is exactly one missing number. Find the missing number.',
'Find the contiguous subarray within an array (containing at least one number) which has the largest product.',
'Find a contiguous subarray which has the largest sum.',
];
const BEHAVIORAL_QUESTION_CONTENT = [
'Tell me about a time you had to work with a difficult person.',
'Rate your communication skills on a scale of 1 to 10.',
'Are you a team player?',
'What is your greatest weakness?',
'What is your greatest strength?',
'What is your biggest accomplishment?',
'What is your biggest failure?',
'Be honest, how would your friends describe you?',
'How do you handle stress?',
'Lets say you have a deadline to meet. How do you prioritize your work?',
];
const CODING_ANSWER_CONTENT = [
'This question is easy. Just use a hash map.',
'This question is hard. I have no idea how to solve it.',
'This question is medium. I can solve it in 30 minutes.',
'Can be done with a simple for loop.',
'Simple recursion can solve this.',
'Please explain the question again.',
'Question is not clear.',
'Brute force solution is the best.',
];
const BEHAVIORAL_ANSWER_CONTENT = [
'This is a very common question. I have a lot of experience with this.',
"I don't think this is a good question to ask. However, I can answer it.",
'Most companies ask this question. I think you should ask something else.',
'I try to take a step back and assess the situation. I figure out what is the most important thing to do and what can wait. I also try to delegate or ask for help when needed.',
'I try to have a discussion with my manager or the person who I feel is not valuing my work. I try to explain how I feel and what I would like to see change.',
'I try to have a discussion with the coworker. I try to understand their perspective and see if there is a way to resolve the issue.',
];
const CODING_QUESTIONS: Array<QuestionCreateData> = CODING_QUESTION_CONTENT.map(
(content) => ({
content,
questionType: 'CODING',
userId: null,
encounters: {
create: {
role: selectRandomRole(),
seenAt: generateRandomDate(),
},
},
}),
);
const BEHAVIORAL_QUESTIONS: Array<QuestionCreateData> =
BEHAVIORAL_QUESTION_CONTENT.map((content) => ({
content,
questionType: 'BEHAVIORAL',
userId: null,
encounters: {
create: {
role: selectRandomRole(),
seenAt: generateRandomDate(),
},
},
}));
const QUESTIONS: Array<QuestionCreateData> = [
...CODING_QUESTIONS,
...BEHAVIORAL_QUESTIONS,
];
async function main() {
console.log('Performing preliminary checks...');
const firstCompany = await prisma.company.findFirst();
if (!firstCompany) {
throw new Error(
'No company found. Please seed db with some companies first.',
);
}
const firstCity = await prisma.city.findFirst({
include: {
state: true,
},
});
if (!firstCity) {
throw new Error('No city found. Please seed db with some cities first.');
}
// Generate random answers to the questions
const users = await prisma.user.findMany();
if (users.length === 0) {
throw new Error('No users found. Please seed db with some users first.');
}
console.log('Seeding started...');
console.log('Creating coding and behavioral questions...');
await Promise.all([
QUESTIONS.map(async (question) => {
await prisma.questionsQuestion.create({
data: {
...question,
encounters: {
create: {
...question.encounters!.create,
companyId: firstCompany.id,
stateId: firstCity.stateId,
cityId: firstCity.id,
countryId: firstCity.state.countryId,
} as any,
},
},
});
}),
]);
console.log('Creating answers to coding questions...');
const codingQuestions = await prisma.questionsQuestion.findMany({
where: {
questionType: 'CODING',
},
});
await Promise.all(
codingQuestions.map(async (question) => {
const answers = Array.from(
{ length: Math.floor(Math.random() * 5) },
() => ({
content: generateRandomCodingAnswer(),
userId: users[Math.floor(Math.random() * users.length)].id,
questionId: question.id,
}),
);
await prisma.questionsAnswer.createMany({
data: answers,
});
}),
);
console.log('Creating answers to behavioral questions...');
const behavioralQuestions = await prisma.questionsQuestion.findMany({
where: {
questionType: 'BEHAVIORAL',
},
});
await Promise.all(
behavioralQuestions.map(async (question) => {
const answers = Array.from(
{ length: Math.floor(Math.random() * 5) },
() => ({
content: generateRandomBehavioralAnswer(),
userId: users[Math.floor(Math.random() * users.length)].id,
questionId: question.id,
}),
);
await prisma.questionsAnswer.createMany({
data: answers,
});
}),
);
console.log('Seeding completed.');
}
main()
.then(async () => {
await prisma.$disconnect();
})
.catch(async (e) => {
console.error(e);
await prisma.$disconnect();
process.exit(1);
});

View File

@ -0,0 +1,359 @@
import reader from 'xlsx';
import { PrismaClient } from '@prisma/client';
import crypto from 'crypto';
import { baseCurrencyString } from '../src/utils/offers/currency';
import { convert } from '../src/utils/offers/currency/currencyExchange';
import {
generateRandomName,
generateRandomStringForToken,
} from '../src/utils/offers/randomGenerator';
const prisma = new PrismaClient();
// Reading our test file
const file = reader.readFile('prisma/salaries.xlsx');
let data: Array<ExcelData> = [];
type ExcelData = {
Timestamp: Date;
Type: string;
Company: string;
Role: string;
Income?: number | string;
Stocks?: number | string;
SignOn?: number | string;
TC?: number | string;
Bonus?: number | string;
Comments?: string;
};
const sheets = file.SheetNames;
for (let i = 0; i < 1; i++) {
const temp = reader.utils.sheet_to_json(file.Sheets[file.SheetNames[i]]);
temp.forEach((res: ExcelData) => {
data.push(res);
});
}
function xlSerialToJsDate(xlSerial) {
return new Date(Date.UTC(0, 0, xlSerial - 1));
}
const getJobTitle = (role: string) => {
const processedRole = role.toUpperCase().trim();
if (processedRole.includes('ML ENGINEER')) {
return 'machine-learning-engineer';
} else if (processedRole.includes('BACKEND')) {
return 'back-end-engineer';
} else if (processedRole.includes('DATA')) {
return 'data-engineer';
} else if (processedRole.includes('DEVOPS')) {
return 'devops-engineer';
} else if (processedRole.includes('ENTERPRISE')) {
return 'enterprise-engineer';
} else if (processedRole.includes('RESEARCH')) {
return 'research-engineer';
} else if (
processedRole.includes('CYBER') ||
processedRole.includes('SECURITY')
) {
return 'security-engineer';
} else if (processedRole.includes('QA')) {
return 'test-engineer';
} else if (processedRole.includes('SYSTEM')) {
return 'systems-engineer';
} else {
return 'software-engineer'; // Assume default SWE
}
};
const getYoe = (type: string) => {
const processedType = type.toUpperCase().trim();
if (
processedType.includes('FRESH GRAD') ||
processedType.includes('JUNIOR')
) {
return Math.floor(Math.random() * 3);
} else if (processedType.includes('MID')) {
return Math.floor(Math.random() * 3) + 3;
} else if (processedType.includes('SENIOR')) {
return Math.floor(Math.random() * 5) + 6;
} else {
return 0; // INTERNSHIP OR ERROR -> 0 YOE
}
};
const getLevel = (type: string) => {
const processedType = type.toUpperCase().trim();
if (
processedType.includes('FRESH GRAD') ||
processedType.includes('JUNIOR')
) {
return 'Junior';
} else if (processedType.includes('MID')) {
return 'Mid';
} else if (processedType.includes('SENIOR')) {
return 'Senior';
} else {
return 'N/A';
}
};
const createdProfileIds: Array<string> = [];
const seedSalaries = async () => {
console.log('Seeding from salaries sheet...');
const companyIdMappings = {};
(await prisma.company.findMany()).forEach((company) => {
companyIdMappings[company.slug] = company.id;
});
// get countryId of Singapore
const singapore = await prisma.city.findFirst({
where: {
name: 'Singapore',
},
});
console.log('Singapore ID: ' + singapore?.id);
// break;
// seed here
if (singapore) {
return await Promise.all(
data.map(async (data: ExcelData) => {
if (data.TC && typeof data.TC === 'number') {
// Generate random name until unique
let uniqueName: string = await generateRandomName();
const jobTitle = getJobTitle(data.Role);
const yoe = getYoe(data.Type);
const level = getLevel(data.Type);
// check if we have company id
if (companyIdMappings[data.Company]) {
const token = crypto
.createHash('sha256')
.update(
xlSerialToJsDate(data.Timestamp).toString() +
generateRandomStringForToken(),
)
.digest('hex');
if (data.Type.toUpperCase() === 'INTERNSHIP') {
// create profile
const dataAdded = await prisma.offersProfile.create({
data: {
profileName: uniqueName,
createdAt: xlSerialToJsDate(data.Timestamp),
editToken: token,
background: {
create: {
totalYoe: yoe,
},
},
offers: {
create: {
comments: data.Comments ?? '',
company: {
connect: {
id: companyIdMappings[data.Company],
},
},
jobType: 'INTERN',
location: {
connect: {
id: singapore.id,
},
}, // TODO: DEFAULT AS SG
monthYearReceived: xlSerialToJsDate(data.Timestamp),
negotiationStrategy: '',
offersIntern: {
create: {
internshipCycle: 'summer',
monthlySalary: {
create: {
baseCurrency: baseCurrencyString,
baseValue: await convert(
data.Income
? typeof data.Income === 'number'
? data.Income
: 0
: 0,
'SGD', // assume sgd
baseCurrencyString,
),
currency: 'SGD', // assume sgd
value: data.Income
? typeof data.Income === 'number'
? data.Income
: 0
: 0,
},
},
startYear: xlSerialToJsDate(
data.Timestamp,
).getFullYear(),
title: jobTitle,
},
},
},
},
},
});
console.log('Profile created:', dataAdded.id);
createdProfileIds.push(dataAdded.id);
} else {
// assume rest full time
const dataAdded = await prisma.offersProfile.create({
data: {
profileName: uniqueName,
createdAt: xlSerialToJsDate(data.Timestamp),
editToken: token,
background: {
create: {
totalYoe: yoe,
},
},
offers: {
create: {
comments: data.Comments ?? '',
company: {
connect: {
id: companyIdMappings[data.Company],
},
},
jobType: 'FULLTIME',
location: {
connect: {
id: singapore.id,
},
}, // TODO: DEFAULT AS SG
monthYearReceived: xlSerialToJsDate(data.Timestamp),
negotiationStrategy: '',
offersFullTime: {
create: {
baseSalary: {
create: {
baseCurrency: baseCurrencyString,
baseValue: await convert(
data.Income
? typeof data.Income === 'number'
? data.Income
: 0
: 0,
'SGD', // assume sgd
baseCurrencyString,
),
currency: 'SGD', // assume sgd
value: data.Income
? typeof data.Income === 'number'
? data.Income
: 0
: 0,
},
},
bonus: {
create: {
baseCurrency: baseCurrencyString,
baseValue: await convert(
data.Bonus
? typeof data.Bonus === 'number'
? data.Bonus
: 0
: 0,
'SGD',
baseCurrencyString,
),
currency: 'SGD',
value: data.Bonus
? typeof data.Bonus === 'number'
? data.Bonus
: 0
: 0,
},
},
level: level,
stocks: {
create: {
baseCurrency: baseCurrencyString,
baseValue: await convert(
data.Stocks
? typeof data.Stocks === 'number'
? data.Stocks
: 0
: 0,
'SGD',
baseCurrencyString,
),
currency: 'SGD',
value: data.Stocks
? typeof data.Stocks === 'number'
? data.Stocks
: 0
: 0,
},
},
title: jobTitle,
totalCompensation: {
create: {
baseCurrency: baseCurrencyString,
baseValue: await convert(
data.TC
? typeof data.TC === 'number'
? data.TC
: 0
: 0,
'SGD',
baseCurrencyString,
),
currency: 'SGD',
value: data.TC
? typeof data.TC === 'number'
? data.TC
: 0
: 0,
},
},
},
},
},
},
},
});
console.log('Profile created:', dataAdded.id);
createdProfileIds.push(dataAdded.id);
}
} else {
console.log('Invalid Company: ' + data.Company);
}
} else {
console.log('Invalid TC not a number: ' + data.TC);
}
}),
);
}
};
Promise.all([seedSalaries()])
.then(() => {
console.log(createdProfileIds.length + ' profiles created');
})
.then(async () => {
await prisma.$disconnect();
})
.catch(async (e) => {
console.error(e);
await prisma.$disconnect();
process.exit(1);
});
export {};

View File

@ -0,0 +1,53 @@
const { PrismaClient } = require('@prisma/client');
const cities = require('./data/cities.json');
const countries = require('./data/countries.json');
const states = require('./data/states.json');
const prisma = new PrismaClient();
async function main() {
console.log('Seeding started...');
console.info('Seeding countries');
await prisma.country.createMany({
data: countries.data.map((country) => ({
id: country.country_id,
code: country.sortname,
name: country.country_name,
})),
skipDuplicates: true,
});
console.info('Seeding states');
await prisma.state.createMany({
data: states.data.map((state) => ({
id: state.state_id,
countryId: state.country_id,
name: state.state_name,
})),
skipDuplicates: true,
});
console.info('Seeding cities');
await prisma.city.createMany({
data: cities.data.map((city) => ({
id: city.city_id,
stateId: city.state_id,
name: city.city_name,
})),
skipDuplicates: true,
});
console.log('Seeding completed.');
}
main()
.then(async () => {
await prisma.$disconnect();
})
.catch(async (e) => {
console.error(e);
await prisma.$disconnect();
process.exit(1);
});

View File

Before

Width:  |  Height:  |  Size: 9.6 KiB

After

Width:  |  Height:  |  Size: 9.6 KiB

View File

Before

Width:  |  Height:  |  Size: 4.8 KiB

After

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 351 KiB

View File

@ -0,0 +1,67 @@
<svg width="421" height="333" viewBox="0 0 421 333" fill="none" xmlns="http://www.w3.org/2000/svg">
<ellipse cx="197.5" cy="292" rx="197.5" ry="41" fill="#EFF2F5"/>
<path d="M328 252.5C328 288.122 269.573 317 197.5 317C125.427 317 67 288.122 67 252.5C67 216.878 125.427 188 197.5 188C269.573 188 328 216.878 328 252.5Z" fill="#D29403"/>
<path d="M328 252.5C328 288.122 269.573 317 197.5 317C125.427 317 67 288.122 67 252.5C67 216.878 125.427 188 197.5 188C269.573 188 328 216.878 328 252.5Z" fill="#D29403"/>
<path d="M67 227C67 221.477 71.4772 217 77 217H318C323.523 217 328 221.477 328 227V253H67V227Z" fill="#D29403"/>
<path d="M328.257 205.316C328.257 240.857 269.825 269.669 197.745 269.669C125.666 269.669 67.2334 240.857 67.2334 205.316C67.2334 169.775 125.666 140.963 197.745 140.963C269.825 140.963 328.257 169.775 328.257 205.316Z" fill="white"/>
<path d="M328.257 205.316C328.257 240.857 269.825 269.669 197.745 269.669C125.666 269.669 67.2334 240.857 67.2334 205.316C67.2334 169.775 125.666 140.963 197.745 140.963C269.825 140.963 328.257 169.775 328.257 205.316Z" fill="white"/>
<path d="M255 292.5C255 297.747 251.194 302 246.5 302C241.806 302 238 297.747 238 292.5C238 287.254 241.806 283 246.5 283C251.194 283 255 287.254 255 292.5Z" fill="#A47811"/>
<path d="M290 280.5C290 285.747 286.194 290 281.5 290C276.806 290 273 285.747 273 280.5C273 275.254 276.806 271 281.5 271C286.194 271 290 275.254 290 280.5Z" fill="#A47811"/>
<path d="M317 263.5C317 268.747 313.418 273 309 273C304.582 273 301 268.747 301 263.5C301 258.254 304.582 254 309 254C313.418 254 317 258.254 317 263.5Z" fill="#A47811"/>
<path d="M328 208.5C328 244.122 269.573 273 197.5 273C125.427 273 67 244.122 67 208.5C67 172.878 125.427 144 197.5 144C269.573 144 328 172.878 328 208.5Z" fill="#E8A301"/>
<path d="M328 208.5C328 244.122 269.573 273 197.5 273C125.427 273 67 244.122 67 208.5C67 172.878 125.427 144 197.5 144C269.573 144 328 172.878 328 208.5Z" fill="#E8A301"/>
<path d="M67 183C67 177.477 71.4772 173 77 173H318C323.523 173 328 177.477 328 183V207H67V183Z" fill="#E8A301"/>
<path d="M328.257 155.328C328.257 190.869 269.825 219.681 197.745 219.681C125.666 219.681 67.2334 190.869 67.2334 155.328C67.2334 119.787 125.666 90.9756 197.745 90.9756C269.825 90.9756 328.257 119.787 328.257 155.328Z" fill="white"/>
<path d="M328.257 155.328C328.257 190.869 269.825 219.681 197.745 219.681C125.666 219.681 67.2334 190.869 67.2334 155.328C67.2334 119.787 125.666 90.9756 197.745 90.9756C269.825 90.9756 328.257 119.787 328.257 155.328Z" fill="white"/>
<path d="M328.257 164.328C328.257 199.869 269.825 228.681 197.745 228.681C125.666 228.681 67.2334 199.869 67.2334 164.328C67.2334 128.787 125.666 99.9756 197.745 99.9756C269.825 99.9756 328.257 128.787 328.257 164.328Z" fill="#FEB915"/>
<path d="M328.257 164.328C328.257 199.869 269.825 228.681 197.745 228.681C125.666 228.681 67.2334 199.869 67.2334 164.328C67.2334 128.787 125.666 99.9756 197.745 99.9756C269.825 99.9756 328.257 128.787 328.257 164.328Z" fill="#FEB915"/>
<path d="M67.2334 128.577H328.257V163.307H67.2334V128.577Z" fill="#FEB915"/>
<rect x="83" y="157" width="8" height="39" rx="4" fill="#D29403"/>
<rect x="108" y="171" width="8" height="41" rx="4" fill="#D29403"/>
<rect x="135" y="180" width="8" height="41" rx="4" fill="#D29403"/>
<path d="M328.257 122.384C328.257 157.925 269.825 186.736 197.745 186.736C125.665 186.736 67.2334 157.925 67.2334 122.384C67.2334 86.8425 125.665 58.0308 197.745 58.0308C269.825 58.0308 328.257 86.8425 328.257 122.384Z" fill="url(#paint0_linear_464_451)"/>
<path d="M328.257 122.384C328.257 157.925 269.825 186.736 197.745 186.736C125.665 186.736 67.2334 157.925 67.2334 122.384C67.2334 86.8425 125.665 58.0308 197.745 58.0308C269.825 58.0308 328.257 86.8425 328.257 122.384Z" fill="url(#paint1_linear_464_451)"/>
<path d="M310.937 121.362C310.937 127.927 307.956 134.293 302.337 140.209C296.71 146.133 288.497 151.536 278.235 156.106C257.713 165.245 229.257 170.936 197.745 170.936C166.234 170.936 137.778 165.245 117.256 156.106C106.993 151.536 98.7803 146.133 93.1537 140.209C87.5344 134.293 84.553 127.927 84.553 121.362C84.553 114.797 87.5344 108.431 93.1537 102.515C98.7803 96.5909 106.993 91.1879 117.256 86.6177C137.778 77.4791 166.234 71.7883 197.745 71.7883C229.257 71.7883 257.713 77.4791 278.235 86.6177C288.497 91.1879 296.71 96.5909 302.337 102.515C307.956 108.431 310.937 114.797 310.937 121.362Z" stroke="#B38519" stroke-width="3"/>
<path d="M312 123C312 150.614 260.737 173 197.5 173C134.263 173 83 150.614 83 123C83 95.3858 134.263 73 197.5 73C260.737 73 312 95.3858 312 123Z" fill="url(#paint2_linear_464_451)"/>
<path d="M312 123C312 150.614 260.737 173 197.5 173C134.263 173 83 150.614 83 123C83 95.3858 134.263 73 197.5 73C260.737 73 312 95.3858 312 123Z" fill="url(#paint3_linear_464_451)"/>
<rect width="62.7775" height="40.8114" rx="5" transform="matrix(0.859385 0.486424 -0.512512 0.872543 356.912 105.104)" fill="#EA5585"/>
<path d="M358.482 165.616C357.162 166.339 355.581 165.445 355.558 163.961L355.339 150.064C355.314 148.501 357.019 147.467 358.365 148.229L370.945 155.35C372.291 156.112 372.234 158.078 370.844 158.84L358.482 165.616Z" fill="#EA5585"/>
<ellipse rx="4.32081" ry="4.47376" transform="matrix(0.487833 0.872937 -0.858827 0.512266 360.684 132.021)" fill="white"/>
<ellipse rx="4.32081" ry="4.47376" transform="matrix(0.487833 0.872937 -0.858827 0.512266 372.733 138.916)" fill="white"/>
<ellipse rx="4.32081" ry="4.47376" transform="matrix(0.487833 0.872937 -0.858827 0.512266 384.783 145.81)" fill="white"/>
<path d="M188.07 2.34887C188.404 1.50629 189.596 1.50629 189.93 2.34888L195.043 15.2661C195.15 15.5371 195.371 15.7479 195.646 15.8431L209.268 20.5549C210.165 20.8654 210.165 22.1346 209.268 22.4451L195.646 27.1569C195.371 27.2521 195.15 27.4629 195.043 27.7339L189.93 40.6511C189.596 41.4937 188.404 41.4937 188.07 40.6511L182.957 27.7339C182.85 27.4629 182.629 27.2521 182.354 27.1569L168.732 22.4451C167.835 22.1346 167.835 20.8654 168.732 20.5549L182.354 15.8431C182.629 15.7479 182.85 15.5371 182.957 15.2661L188.07 2.34887Z" fill="#FBE54D"/>
<path d="M33.557 127.673C33.8709 126.783 35.1291 126.783 35.443 127.673L39.884 140.26C39.981 140.535 40.1933 140.754 40.4652 140.859L52.5978 145.568C53.4487 145.898 53.4487 147.102 52.5978 147.432L40.4652 152.141C40.1933 152.246 39.981 152.465 39.884 152.74L35.443 165.327C35.1291 166.217 33.8709 166.217 33.557 165.327L29.116 152.74C29.019 152.465 28.8067 152.246 28.5348 152.141L16.4022 147.432C15.5513 147.102 15.5513 145.898 16.4022 145.568L28.5348 140.859C28.8067 140.754 29.019 140.535 29.116 140.26L33.557 127.673Z" fill="#FBE54D"/>
<path d="M148.553 266.786C148.86 265.882 150.14 265.882 150.447 266.786L155.429 281.448C155.523 281.724 155.732 281.945 156.003 282.054L169.698 287.572C170.533 287.909 170.533 289.091 169.698 289.428L156.003 294.946C155.732 295.055 155.523 295.276 155.429 295.552L150.447 310.214C150.14 311.118 148.86 311.118 148.553 310.214L143.571 295.552C143.477 295.276 143.268 295.055 142.997 294.946L129.302 289.428C128.467 289.091 128.467 287.909 129.302 287.572L142.997 282.054C143.268 281.945 143.477 281.724 143.571 281.448L148.553 266.786Z" fill="#FBE54D"/>
<path d="M340.065 188.473C340.391 187.611 341.609 187.611 341.935 188.473L347.049 201.993C347.153 202.266 347.37 202.48 347.644 202.579L361.402 207.56C362.282 207.878 362.282 209.122 361.402 209.44L347.644 214.421C347.37 214.52 347.153 214.734 347.049 215.007L341.935 228.527C341.609 229.389 340.391 229.389 340.065 228.527L334.951 215.007C334.847 214.734 334.63 214.52 334.356 214.421L320.598 209.44C319.718 209.122 319.718 207.878 320.598 207.56L334.356 202.579C334.63 202.48 334.847 202.266 334.951 201.993L340.065 188.473Z" fill="#FBE54D"/>
<rect width="68.9835" height="44.8202" rx="5" transform="matrix(0.858588 -0.512666 0.48744 0.873157 25.707 37.4084)" fill="#67E2A5"/>
<path d="M85.4411 70.007C85.4858 71.629 83.7437 72.6692 82.4078 71.8182L67.2894 62.187C66.0329 61.3864 66.0791 59.4893 67.374 58.7161L81.9867 49.9908C83.2816 49.2176 84.8933 50.1248 84.9354 51.6505L85.4411 70.007Z" fill="#67E2A5"/>
<ellipse cx="60.8525" cy="32.4967" rx="6.64913" ry="6.87663" fill="white"/>
<path d="M59.0778 56.9464C56.3857 52.1241 58.0474 45.9196 62.7892 43.0882L70.296 38.6059C75.0378 35.7745 81.0642 37.3885 83.7563 42.2108L85.2766 44.9343L60.5981 59.6699L59.0778 56.9464Z" fill="white"/>
<rect width="8" height="35.872" rx="4" transform="matrix(-0.533901 -0.845547 0.884338 -0.466847 146 128)" fill="#B38519"/>
<rect width="8" height="64.5197" rx="4" transform="matrix(-0.948835 -0.315772 0.369837 -0.929097 190.885 155)" fill="#B38519"/>
<rect width="8" height="35.872" rx="4" transform="matrix(-0.533901 0.845547 -0.884338 -0.466847 178 134)" fill="#B38519"/>
<path d="M225.537 139.133C223.584 140.164 221.044 139.486 219.864 137.618V137.618C218.685 135.75 219.313 133.4 221.266 132.368L245.914 119.356C247.868 118.325 250.408 119.003 251.587 120.871V120.871C252.767 122.739 252.139 125.089 250.186 126.121L225.537 139.133Z" fill="#B38519"/>
<rect width="8" height="35.872" rx="4" transform="matrix(-0.533901 0.845547 -0.884338 -0.466847 254 121)" fill="#B38519"/>
<defs>
<linearGradient id="paint0_linear_464_451" x1="189.835" y1="186.736" x2="362.561" y2="-21.2541" gradientUnits="userSpaceOnUse">
<stop stop-color="#FFCC53"/>
<stop offset="0.418898" stop-color="#FFDC8A"/>
<stop offset="1" stop-color="#FFF3D7"/>
</linearGradient>
<linearGradient id="paint1_linear_464_451" x1="189.835" y1="186.736" x2="362.561" y2="-21.2541" gradientUnits="userSpaceOnUse">
<stop stop-color="#FFCC53"/>
<stop offset="0.418898" stop-color="#FFDC8A"/>
<stop offset="1" stop-color="#FFF3D7"/>
</linearGradient>
<linearGradient id="paint2_linear_464_451" x1="190.561" y1="173" x2="320.885" y2="-4.20097" gradientUnits="userSpaceOnUse">
<stop stop-color="#FEB915"/>
<stop offset="0.418898" stop-color="#FFDC8A"/>
<stop offset="1" stop-color="#FFF3D7"/>
</linearGradient>
<linearGradient id="paint3_linear_464_451" x1="190.561" y1="173" x2="320.885" y2="-4.20097" gradientUnits="userSpaceOnUse">
<stop stop-color="#FEB915"/>
<stop offset="0.418898" stop-color="#FFDC8A"/>
<stop offset="1" stop-color="#FFF3D7"/>
</linearGradient>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 10 KiB

View File

@ -0,0 +1,60 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 582.39 458.49">
<defs>
<style>
.cls-1 {
fill: #00e5a0;
}
.cls-2 {
fill: #eef2f5;
}
.cls-3 {
fill: #e6e6e6;
}
.cls-4 {
fill: #fee400;
}
.cls-5 {
fill: #fff;
}
.cls-6 {
fill: #ff4585;
}
.cls-7 {
fill: #7f7ff0;
}
.cls-8 {
fill: #363636;
}
</style>
</defs>
<ellipse class="cls-2" cx="291.19" cy="428.46" rx="291.19" ry="30.03"/>
<path class="cls-7" d="M94.28,226.37c0-108.75,88.16-196.92,196.92-196.92s196.92,88.16,196.92,196.92c0,75.78-42.81,141.57-105.57,174.49-27.3,14.32-58.38-12.43-91.35-12.43-22.94,0-44.96,30.93-65.44,23.72-76.58-26.98-131.47-99.97-131.47-185.78Z"/>
<rect class="cls-6" x="596.3" y="-67.3" width="59.5" height="90.16" rx="11.44" ry="11.44" transform="translate(328.22 528.9) rotate(-59.58)"/>
<g>
<rect class="cls-3" x="158.7" y="37.28" width="265.22" height="378.18" rx="30" ry="30" transform="translate(-10.62 14.38) rotate(-2.78)"/>
<rect class="cls-5" x="145.53" y="37.92" width="265.22" height="378.18" rx="30" ry="30" transform="translate(-10.67 13.74) rotate(-2.78)"/>
<path class="cls-6" d="M140.58,128.04l-2.6-53.51c-.8-16.55,11.96-30.62,28.51-31.42l204.98-9.94c16.55-.8,30.62,11.96,31.42,28.51l2.6,53.51-264.91,12.85Z"/>
<rect class="cls-8" x="161.75" y="143.74" width="128.01" height="12.88" rx="6.42" ry="6.42" transform="translate(-7.01 11.11) rotate(-2.78)"/>
<rect class="cls-3" x="164.92" y="208.64" width="160" height="12.88" rx="6.42" ry="6.42" transform="translate(-10.13 12.12) rotate(-2.78)"/>
<rect class="cls-8" x="163.38" y="178.26" width="58.72" height="12.88" rx="6.42" ry="6.42" transform="translate(-8.72 9.55) rotate(-2.78)"/>
<rect class="cls-3" x="166.54" y="242.71" width="108.99" height="12.88" rx="6.42" ry="6.42" transform="translate(-11.81 11) rotate(-2.78)"/>
<rect class="cls-3" x="170.18" y="317.14" width="160" height="12.88" rx="6.42" ry="6.42" transform="translate(-15.38 12.5) rotate(-2.78)"/>
<rect class="cls-3" x="168.62" y="285.54" width="108.99" height="12.88" rx="6.42" ry="6.42" transform="translate(-13.88 11.15) rotate(-2.78)"/>
<rect class="cls-3" x="171.8" y="351.21" width="108.99" height="12.88" rx="6.42" ry="6.42" transform="translate(-17.06 11.38) rotate(-2.78)"/>
<rect class="cls-4" x="319.94" y="77.98" width="60.57" height="63.56" rx="13.76" ry="13.76" transform="translate(-4.91 17.09) rotate(-2.78)"/>
</g>
<g>
<circle class="cls-1" cx="405.49" cy="348.96" r="51.89"/>
<path class="cls-5" d="M396.69,374.45l-24.26-23.7,10.85-11.13,13.74,13.42,31.52-28.99,10.51,11.44s-42.34,38.96-42.34,38.96Z"/>
</g>
<path class="cls-4" d="M141.58,319.12l12.69,22.46c.94,1.66,2.72,2.66,4.63,2.61l25.78-.8c5.36-.17,7.35,6.96,2.68,9.6l-22.46,12.69c-1.66,.94-2.66,2.72-2.61,4.63l.8,25.78c.17,5.36-6.96,7.35-9.6,2.68l-12.69-22.46c-.94-1.66-2.72-2.66-4.63-2.61l-25.78,.8c-5.36,.17-7.35-6.96-2.68-9.6l22.46-12.69c1.66-.94,2.66-2.72,2.61-4.63l-.8-25.78c-.17-5.36,6.96-7.35,9.6-2.68Z"/>
<path class="cls-4" d="M456.08,148.79l-.5,22.57c-.05,2.16,1.11,4.18,3,5.23l19.75,10.93c5.32,2.95,3.13,11.06-2.95,10.92l-22.57-.5c-2.16-.05-4.18,1.11-5.23,3l-10.93,19.75c-2.95,5.32-11.06,3.13-10.92-2.95l.5-22.57c.05-2.16-1.11-4.18-3-5.23l-19.75-10.93c-5.32-2.95-3.13-11.06,2.95-10.92l22.57,.5c2.16,.05,4.18-1.11,5.23-3l10.93-19.75c2.95-5.32,11.06-3.13,10.92,2.95Z"/>
</svg>

After

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 144 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 189 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 69 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 130 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 88 KiB

View File

@ -0,0 +1,250 @@
import clsx from 'clsx';
import Link from 'next/link';
import { useRouter } from 'next/router';
import { signOut, useSession } from 'next-auth/react';
import type { ReactNode } from 'react';
import { Fragment, useState } from 'react';
import { Menu, Transition } from '@headlessui/react';
import { Bars3BottomLeftIcon } from '@heroicons/react/24/outline';
import { Button } from '~/ui';
import GlobalNavigation from '~/components/global/GlobalNavigation';
import HomeNavigation from '~/components/global/HomeNavigation';
import OffersNavigation, {
OffersNavigationAdmin,
OffersNavigationAuthenticated,
} from '~/components/offers/OffersNavigation';
import QuestionsNavigation from '~/components/questions/QuestionsNavigation';
import ResumesNavigation from '~/components/resumes/ResumesNavigation';
import { trpc } from '~/utils/trpc';
import GoogleAnalytics from './GoogleAnalytics';
import MobileNavigation from './MobileNavigation';
import type { ProductNavigationItems } from './ProductNavigation';
import ProductNavigation from './ProductNavigation';
import loginPageHref from '../shared/loginPageHref';
type Props = Readonly<{
children: ReactNode;
}>;
function ProfileJewel() {
const router = useRouter();
const { data: session, status } = useSession();
const isSessionLoading = status === 'loading';
if (isSessionLoading) {
return null;
}
const loginHref = loginPageHref();
if (session == null) {
return router.pathname !== loginHref.pathname ? (
<div className="flex items-center space-x-4">
<Link
className="hover:text-primary-500 text-xs font-medium text-slate-700"
href={loginHref}>
Sign In
</Link>
<Button
href={{
...loginHref,
query: {
...loginHref.query,
mode: 'signup',
},
}}
label="Sign Up"
size="sm"
variant="tertiary"
/>
</div>
) : null;
}
const userNavigation = [
{ href: '/settings', name: 'Settings' },
{
href: '/api/auth/signout',
name: 'Sign Out',
onClick: (event: React.MouseEvent<HTMLAnchorElement>) => {
event.preventDefault();
signOut();
},
},
];
return (
<Menu as="div" className="relative flex-shrink-0">
<div>
<Menu.Button className="focus:ring-primary-500 flex rounded-full bg-white text-sm focus:outline-none focus:ring-2 focus:ring-offset-2">
<span className="sr-only">Open user menu</span>
{session?.user?.image == null ? (
<span>TODO: Render some icon</span>
) : (
<img
alt={session?.user?.email ?? session?.user?.name ?? ''}
className="h-8 w-8 rounded-full"
src={session?.user.image}
/>
)}
</Menu.Button>
</div>
<Transition
as={Fragment}
enter="transition ease-out duration-100"
enterFrom="transform opacity-0 scale-95"
enterTo="transform opacity-100 scale-100"
leave="transition ease-in duration-75"
leaveFrom="transform opacity-100 scale-100"
leaveTo="transform opacity-0 scale-95">
<Menu.Items className="absolute right-0 z-10 mt-2 w-48 origin-top-right rounded-md bg-white py-1 shadow-lg ring-1 ring-black ring-opacity-5 focus:outline-none">
{!!session?.user?.name && (
<Menu.Item>
{() => (
<span className="block px-4 py-2 text-sm font-semibold text-slate-700">
{session?.user?.name ?? ''}
</span>
)}
</Menu.Item>
)}
{userNavigation.map((item) => (
<Menu.Item key={item.name}>
{({ active }) => (
<Link
className={clsx(
active ? 'bg-slate-100' : '',
'block px-4 py-2 text-sm text-slate-700',
)}
href={item.href}
onClick={item.onClick}>
{item.name}
</Link>
)}
</Menu.Item>
))}
</Menu.Items>
</Transition>
</Menu>
);
}
export default function AppShell({ children }: Props) {
const [mobileMenuOpen, setMobileMenuOpen] = useState(false);
const router = useRouter();
const { data: session } = useSession();
// TODO: Shift this into offers pages and not in this common component.
const { isLoading: isOffersAdminResultsLoading, data: isOffersAdmin } =
trpc.useQuery(['offers.admin.isAdmin']);
const currentProductNavigation: Readonly<{
logo?: React.ReactNode;
navigation: ProductNavigationItems;
showGlobalNav: boolean;
title: string;
titleHref: string;
}> = (() => {
const path = router.pathname;
if (path.startsWith('/resumes')) {
return ResumesNavigation;
}
if (path.startsWith('/offers')) {
if (session == null) {
return OffersNavigation;
}
if (!isOffersAdminResultsLoading && isOffersAdmin) {
return OffersNavigationAdmin;
}
return OffersNavigationAuthenticated;
}
if (path.startsWith('/questions')) {
return QuestionsNavigation;
}
return HomeNavigation;
})();
return (
<GoogleAnalytics>
<div className="flex">
{/* Narrow sidebar */}
{currentProductNavigation.showGlobalNav && (
<div className="hidden w-28 overflow-y-auto border-r border-slate-200 bg-white md:block">
<div className="flex w-full flex-col items-center py-6">
<div className="flex flex-shrink-0 items-center">
<Link href="/">
<img
alt="Tech Interview Handbook"
className="h-8 w-auto"
src="/logo.svg"
/>
</Link>
</div>
<div className="mt-6 w-full flex-1 space-y-1 px-2">
{GlobalNavigation.map((item) => (
<Link
key={item.name}
className={clsx(
'text-slate-700 hover:bg-slate-100',
'group flex w-full flex-col items-center rounded-md p-3 text-xs font-medium',
)}
href={item.href}>
<item.icon
aria-hidden="true"
className={clsx(
'text-slate-500 group-hover:text-slate-700',
'h-6 w-6',
)}
/>
<span className="mt-2">{item.name}</span>
</Link>
))}
</div>
</div>
</div>
)}
{/* Mobile menu */}
<MobileNavigation
globalNavigationItems={GlobalNavigation}
isShown={mobileMenuOpen}
logo={currentProductNavigation.logo}
productNavigationItems={currentProductNavigation.navigation}
productTitle={currentProductNavigation.title}
setIsShown={setMobileMenuOpen}
/>
{/* Content area */}
<div className="w-full">
{/* Navigation Bar */}
<header className="sticky top-0 z-10 w-full">
<div className="relative flex h-16 flex-shrink-0 border-b border-slate-200 bg-white shadow-sm">
<button
className="focus:ring-primary-500 border-r border-slate-200 px-4 text-slate-500 focus:outline-none focus:ring-2 focus:ring-inset md:hidden"
type="button"
onClick={() => setMobileMenuOpen(true)}>
<span className="sr-only">Open sidebar</span>
<Bars3BottomLeftIcon aria-hidden="true" className="h-6 w-6" />
</button>
<div className="flex flex-1 justify-between px-4 sm:px-6 lg:px-8">
<div className="flex flex-1 items-center">
<ProductNavigation
items={currentProductNavigation.navigation}
logo={currentProductNavigation.logo}
title={currentProductNavigation.title}
titleHref={currentProductNavigation.titleHref}
/>
</div>
<div className="ml-2 flex items-center space-x-4 sm:ml-6 sm:space-x-6">
<ProfileJewel />
</div>
</div>
</div>
</header>
{/* Main Content */}
<div className="w-full">{children}</div>
</div>
</div>
</GoogleAnalytics>
);
}

View File

@ -0,0 +1,24 @@
import {
BriefcaseIcon,
CurrencyDollarIcon,
DocumentTextIcon,
} from '@heroicons/react/24/outline';
type GlobalNavigationItem = Readonly<{
href: string;
icon: (props: React.ComponentProps<'svg'>) => JSX.Element;
name: string;
}>;
export type GlobalNavigationItems = ReadonlyArray<GlobalNavigationItem>;
const globalNavigation: GlobalNavigationItems = [
{ href: '/offers', icon: CurrencyDollarIcon, name: 'Offers' },
{
href: '/questions',
icon: BriefcaseIcon,
name: 'Questions',
},
{ href: '/resumes', icon: DocumentTextIcon, name: 'Resumes' },
];
export default globalNavigation;

View File

@ -0,0 +1,99 @@
import { useRouter } from 'next/router';
import Script from 'next/script';
import { createContext, useContext, useEffect } from 'react';
type Context = Readonly<{
event: (payload: GoogleAnalyticsEventPayload) => void;
}>;
const MEASUREMENT_ID = 'G-DBLZDQ2ZZN';
export const GoogleAnalyticsContext = createContext<Context>({
event,
});
// https://developers.google.com/analytics/devguides/collection/gtagjs/pages
function pageview(url: string) {
// Don't log analytics during development.
if (process.env.NODE_ENV === 'development') {
return;
}
window.gtag('event', 'page_view', {
page_location: window.location.href,
page_path: url,
page_title: document.title,
});
}
type GoogleAnalyticsEventPayload = Readonly<{
action: string;
category: string;
label: string;
value?: number;
}>;
// https://developers.google.com/analytics/devguides/collection/gtagjs/events
export function event({
action,
category,
label,
value,
}: GoogleAnalyticsEventPayload) {
// Don't log analytics during development.
if (process.env.NODE_ENV === 'development') {
return;
}
window.gtag('event', action, {
event_category: category,
event_label: label,
value,
});
}
type Props = Readonly<{
children: React.ReactNode;
}>;
export function useGoogleAnalytics() {
return useContext(GoogleAnalyticsContext);
}
export default function GoogleAnalytics({ children }: Props) {
const router = useRouter();
useEffect(() => {
function handleRouteChange(url: string) {
pageview(url);
}
router.events.on('routeChangeComplete', handleRouteChange);
return () => {
router.events.off('routeChangeComplete', handleRouteChange);
};
}, [router.events,]);
return (
<GoogleAnalyticsContext.Provider value={{ event }}>
{children}
{/* Global Site Tag (gtag.js) - Google Analytics */}
<Script
async={true}
src={`https://www.googletagmanager.com/gtag/js?id=${MEASUREMENT_ID}`}
/>
<Script
dangerouslySetInnerHTML={{
__html: `
window.dataLayer = window.dataLayer || [];
window.gtag = function(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', '${MEASUREMENT_ID}', {
page_path: window.location.pathname,
});
`,
}}
id="google-analytics"
/>
</GoogleAnalyticsContext.Provider>
);
}

Some files were not shown because too many files have changed in this diff Show More