Abdullah12314 commited on
Commit
cfc9601
·
0 Parent(s):

Initial commit: usb version

Browse files
This view is limited to 50 files because it contains too many changes.   See raw diff
Files changed (50) hide show
  1. next/.gitignore +43 -0
  2. next/Edupath_Final_Database.csv +0 -0
  3. next/International_Education_Costs.csv +908 -0
  4. next/QS World University Rankings 2025.csv +0 -0
  5. next/README.md +36 -0
  6. next/components.json +22 -0
  7. next/eslint.config.mjs +18 -0
  8. next/fetch_real_fees.py +153 -0
  9. next/fill_database.py +104 -0
  10. next/fill_tuition.py +117 -0
  11. next/global.d.ts +1 -0
  12. next/merge_data.py +199 -0
  13. next/next.config.ts +8 -0
  14. next/package-lock.json +0 -0
  15. next/package.json +52 -0
  16. next/postcss.config.mjs +7 -0
  17. next/prisma/schema.prisma +120 -0
  18. next/public/file.svg +1 -0
  19. next/public/globe.svg +1 -0
  20. next/public/next.svg +1 -0
  21. next/public/vercel.svg +1 -0
  22. next/public/window.svg +1 -0
  23. next/scripts/import_universities.ts +71 -0
  24. next/scripts/upsert_us_fees.ts +86 -0
  25. next/src/app/about-us/page.tsx +186 -0
  26. next/src/app/api/auth/login/route.ts +34 -0
  27. next/src/app/api/auth/register/route.ts +44 -0
  28. next/src/app/api/universities/route.ts +45 -0
  29. next/src/app/blogs/page.tsx +166 -0
  30. next/src/app/contact-us/page.tsx +239 -0
  31. next/src/app/dashboard/compare/page.tsx +178 -0
  32. next/src/app/dashboard/layout.tsx +27 -0
  33. next/src/app/dashboard/page.tsx +98 -0
  34. next/src/app/dashboard/roadmap/page.tsx +482 -0
  35. next/src/app/dashboard/university/[id]/page.tsx +214 -0
  36. next/src/app/dashboard/university/page.tsx +151 -0
  37. next/src/app/favicon.ico +0 -0
  38. next/src/app/features/page.tsx +237 -0
  39. next/src/app/globals.css +127 -0
  40. next/src/app/layout.tsx +55 -0
  41. next/src/app/login/page.tsx +118 -0
  42. next/src/app/page.tsx +194 -0
  43. next/src/app/register/page.tsx +154 -0
  44. next/src/components/CountryFilter.tsx +42 -0
  45. next/src/components/UniversityCard.tsx +83 -0
  46. next/src/components/dashboard-sidebar.tsx +83 -0
  47. next/src/components/footer.tsx +86 -0
  48. next/src/components/navbar.tsx +91 -0
  49. next/src/components/ui/avatar.tsx +53 -0
  50. next/src/components/ui/badge.tsx +46 -0
next/.gitignore ADDED
@@ -0,0 +1,43 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
2
+
3
+ # dependencies
4
+ /node_modules
5
+ /.pnp
6
+ .pnp.*
7
+ .yarn/*
8
+ !.yarn/patches
9
+ !.yarn/plugins
10
+ !.yarn/releases
11
+ !.yarn/versions
12
+
13
+ # testing
14
+ /coverage
15
+
16
+ # next.js
17
+ /.next/
18
+ /out/
19
+
20
+ # production
21
+ /build
22
+
23
+ # misc
24
+ .DS_Store
25
+ *.pem
26
+
27
+ # debug
28
+ npm-debug.log*
29
+ yarn-debug.log*
30
+ yarn-error.log*
31
+ .pnpm-debug.log*
32
+
33
+ # env files (can opt-in for committing if needed)
34
+ .env*
35
+
36
+ # vercel
37
+ .vercel
38
+
39
+ # typescript
40
+ *.tsbuildinfo
41
+ next-env.d.ts
42
+
43
+ /src/generated/prisma
next/Edupath_Final_Database.csv ADDED
The diff for this file is too large to render. See raw diff
 
next/International_Education_Costs.csv ADDED
@@ -0,0 +1,908 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Country,City,University,Program,Level,Duration_Years,Tuition_USD,Living_Cost_Index,Rent_USD,Visa_Fee_USD,Insurance_USD,Exchange_Rate
2
+ USA,Cambridge,Harvard University,Computer Science,Master,2,55400,83.5,2200,160,1500,1.00
3
+ UK,London,Imperial College London,Data Science,Master,1,41200,75.8,1800,485,800,0.79
4
+ Canada,Toronto,University of Toronto,Business Analytics,Master,2,38500,72.5,1600,235,900,1.35
5
+ Australia,Melbourne,University of Melbourne,Engineering,Master,2,42000,71.2,1400,450,650,1.52
6
+ Germany,Munich,Technical University of Munich,Mechanical Engineering,Master,2,500,70.5,1100,75,550,0.92
7
+ Japan,Tokyo,University of Tokyo,Information Science,Master,2,8900,76.4,1300,220,750,145.8
8
+ Netherlands,Amsterdam,University of Amsterdam,Artificial Intelligence,Master,1,15800,73.2,1500,180,720,0.92
9
+ Singapore,Singapore,National University of Singapore,Finance,Master,1.5,35000,81.1,1900,90,800,1.34
10
+ France,Paris,Sorbonne University,International Relations,Master,2,4500,74.6,1400,99,650,0.92
11
+ Switzerland,Zurich,ETH Zurich,Physics,Master,2,1460,91.5,2100,88,1200,0.89
12
+ Sweden,Stockholm,KTH Royal Institute,Sustainable Technology,Master,2,0,71.8,1200,110,400,10.45
13
+ Denmark,Copenhagen,University of Copenhagen,Bioinformatics,Master,2,0,73.4,1300,120,450,6.92
14
+ China,Beijing,Tsinghua University,Computer Engineering,Master,2.5,8900,52.3,800,140,400,7.18
15
+ South Korea,Seoul,Seoul National University,Digital Media,Master,2,7200,68.7,900,130,500,1320.5
16
+ Ireland,Dublin,Trinity College Dublin,Data Analytics,Master,1,28900,72.9,1600,150,650,0.92
17
+ South Korea,Busan,Pusan National University,Business,Bachelor,4,5900,62.4,700,130,500,1320.5
18
+ New Zealand,Auckland,University of Auckland,Marine Biology,Bachelor,3,28500,69.8,1200,245,600,1.64
19
+ Austria,Vienna,University of Vienna,Social Sciences,Bachelor,3,1500,67.4,950,160,500,0.92
20
+ Belgium,Brussels,KU Leuven,Biomedical Sciences,Bachelor,3,3500,68.9,1000,180,550,0.92
21
+ USA,Ann Arbor,University of Michigan,Aerospace Engineering,Bachelor,4,52300,72.5,1800,160,1500,1.00
22
+ USA,Atlanta,Georgia Tech,Industrial Engineering,Bachelor,4,43800,71.5,1700,160,1500,1.00
23
+ USA,Austin,UT Austin,Chemical Engineering,Bachelor,4,40900,72.4,1600,160,1500,1.00
24
+ UK,Bristol,University of Bristol,Mathematics,Bachelor,3,31200,69.8,1100,485,800,0.79
25
+ Canada,Ottawa,University of Ottawa,Political Science,Bachelor,4,28900,68.5,1300,235,900,1.35
26
+ Hong Kong,Hong Kong,HKUST,Finance,Bachelor,4,22000,78.6,1500,120,600,7.82
27
+ Portugal,Lisbon,University of Lisbon,Architecture,Bachelor,3,3500,58.4,800,120,450,0.92
28
+ Israel,Tel Aviv,Tel Aviv University,Computer Science,Bachelor,3,12000,76.2,1200,150,800,3.72
29
+ Taiwan,Taipei,National Taiwan University,Electronics Engineering,Bachelor,4,5200,62.8,700,140,450,31.2
30
+ Czech Republic,Prague,Charles University,Medicine,Bachelor,3,9800,54.6,650,100,400,22.5
31
+ USA,Stanford,Stanford University,Computer Science,PhD,5,54200,89.5,2300,160,1500,1.00
32
+ USA,Boston,MIT,Electrical Engineering,PhD,5,53800,83.2,2200,160,1500,1.00
33
+ UK,Oxford,University of Oxford,Biomedical Sciences,PhD,4,29800,74.5,1600,485,800,0.79
34
+ UK,Cambridge,University of Cambridge,Physics,PhD,4,31200,75.2,1700,485,800,0.79
35
+ Germany,Heidelberg,Heidelberg University,Molecular Biology,PhD,3,500,68.4,900,75,550,0.92
36
+ Switzerland,Basel,ETH Basel,Pharmaceutical Sciences,PhD,4,1500,88.6,1800,88,1200,0.89
37
+ Netherlands,Delft,TU Delft,Robotics,PhD,4,4800,71.8,1200,180,720,0.92
38
+ Singapore,Singapore,NTU Singapore,Data Science,PhD,4,8900,81.5,1600,90,800,1.34
39
+ Canada,Waterloo,University of Waterloo,Quantum Computing,PhD,4,21500,69.8,1300,235,900,1.35
40
+ Australia,Canberra,Australian National University,Climate Science,PhD,4,29800,70.2,1400,450,650,1.52
41
+ Sweden,Lund,Lund University,Neuroscience,PhD,4,0,69.5,1000,110,400,10.45
42
+ USA,San Diego,UC San Diego,Computer Science,Bachelor,4,44200,79.5,1900,160,1500,1.00
43
+ USA,Seattle,University of Washington,Computer Science,Master,2,38900,83.4,2000,160,1500,1.00
44
+ Canada,Edmonton,University of Alberta,Computer Science,PhD,4,22800,67.8,1200,235,900,1.35
45
+ UK,Glasgow,University of Glasgow,Computer Science,Master,1,33500,67.5,1100,485,800,0.79
46
+ India,Bangalore,Indian Institute of Science,Computer Science,Master,2,2500,45.6,500,200,300,83.2
47
+ Denmark,Aalborg,Aalborg University,Computer Science,Bachelor,3,0,69.8,900,120,450,6.92
48
+ Poland,Warsaw,University of Warsaw,Computer Science,Master,2,3800,51.2,650,80,350,4.02
49
+ Ireland,Galway,NUI Galway,Computer Science,Bachelor,4,25800,68.5,1100,150,650,0.92
50
+ South Korea,Daejeon,KAIST,Computer Science,PhD,4,6900,65.4,700,130,500,1320.5
51
+ Malaysia,Kuala Lumpur,University of Malaya,Computer Science,Bachelor,4,4800,48.2,500,110,300,4.72
52
+ USA,Berkeley,UC Berkeley,Computer Science,Bachelor,4,44900,84.2,2100,160,1500,1.00
53
+ UK,Manchester,University of Manchester,Economics,Bachelor,3,32000,68.4,1200,485,800,0.79
54
+ Canada,Vancouver,University of British Columbia,Psychology,Bachelor,4,31200,71.2,1700,235,900,1.35
55
+ Australia,Sydney,University of Sydney,Business,Bachelor,3,35000,72.8,1600,450,650,1.52
56
+ Germany,Berlin,Free University of Berlin,International Business,Bachelor,3,0,65.2,900,75,550,0.92
57
+ Spain,Barcelona,University of Barcelona,Architecture,Bachelor,4,2800,62.4,950,160,500,0.92
58
+ Italy,Milan,Politecnico di Milano,Design,Bachelor,3,4200,63.8,1100,120,650,0.92
59
+ Netherlands,Rotterdam,Erasmus University,Economics,Bachelor,3,11200,71.5,1300,180,720,0.92
60
+ Finland,Helsinki,University of Helsinki,Computer Science,Bachelor,3,0,70.2,1100,120,400,0.92
61
+ Norway,Oslo,University of Oslo,Environmental Science,Bachelor,3,0,75.6,1400,135,450,10.45
62
+ Japan,Osaka,Osaka University,Engineering,Bachelor,4,6800,71.2,900,220,750,145.8
63
+ Japan,Kyoto,Kyoto University,Computer Science,Master,2,8500,71.8,900,220,750,145.8
64
+ Japan,Nagoya,Nagoya University,Information Science,Bachelor,4,7800,68.5,750,220,750,145.8
65
+ Japan,Sendai,Tohoku University,Software Engineering,Master,2,8200,65.4,650,220,750,145.8
66
+ Japan,Fukuoka,Kyushu University,Computer Engineering,Bachelor,4,7500,64.8,600,220,750,145.8
67
+ Japan,Sapporo,Hokkaido University,Data Science,Master,2,8100,63.5,550,220,750,145.8
68
+ Japan,Tokyo,Tokyo Institute of Technology,Artificial Intelligence,PhD,3,8900,76.4,1100,220,750,145.8
69
+ Japan,Tsukuba,University of Tsukuba,Information Systems,Bachelor,4,7200,64.2,600,220,750,145.8
70
+ Japan,Kobe,Kobe University,Computer Science,Master,2,7900,67.8,700,220,750,145.8
71
+ Japan,Kanazawa,Kanazawa University,Software Engineering,Bachelor,4,7100,62.5,500,220,750,145.8
72
+ Japan,Hiroshima,Hiroshima University,Information Technology,Master,2,7600,63.8,550,220,750,145.8
73
+ Australia,Adelaide,University of Adelaide,Computer Science,Bachelor,3,32800,68.5,1100,450,650,1.52
74
+ Australia,Perth,University of Western Australia,Software Engineering,Master,2,34500,69.8,1200,450,650,1.52
75
+ Australia,Gold Coast,Griffith University,Information Technology,Bachelor,3,31200,67.5,1100,450,650,1.52
76
+ Australia,Hobart,University of Tasmania,Data Science,Master,2,30800,65.4,950,450,650,1.52
77
+ Australia,Newcastle,University of Newcastle,Computer Engineering,Bachelor,4,31500,66.8,1000,450,650,1.52
78
+ Australia,Wollongong,University of Wollongong,Artificial Intelligence,Master,2,32900,67.2,1050,450,650,1.52
79
+ Australia,Darwin,Charles Darwin University,Information Systems,Bachelor,3,29800,64.5,900,450,650,1.52
80
+ Australia,Townsville,James Cook University,Data Analytics,Master,2,31200,65.8,950,450,650,1.52
81
+ Australia,Sunshine Coast,USC,Software Development,Bachelor,3,29500,66.2,1000,450,650,1.52
82
+ Australia,Armidale,University of New England,Computing Science,Master,2,30500,64.8,850,450,650,1.52
83
+ Germany,Dresden,TU Dresden,Computer Science,Master,2,500,65.8,750,75,550,0.92
84
+ Germany,Stuttgart,University of Stuttgart,Software Engineering,Bachelor,3,450,68.5,850,75,550,0.92
85
+ Germany,Hamburg,TU Hamburg,Data Engineering,Master,2,500,71.2,950,75,550,0.92
86
+ Germany,Aachen,RWTH Aachen,Computer Engineering,Bachelor,3,500,66.4,700,75,550,0.92
87
+ Germany,Karlsruhe,KIT,Artificial Intelligence,Master,2,500,67.8,800,75,550,0.92
88
+ Germany,Darmstadt,TU Darmstadt,Information Systems,Bachelor,3,450,66.9,750,75,550,0.92
89
+ Germany,Braunschweig,TU Braunschweig,Software Systems,Master,2,500,64.5,650,75,550,0.92
90
+ Germany,Jena,University of Jena,Data Science,Bachelor,3,450,63.8,600,75,550,0.92
91
+ Germany,Hannover,Leibniz University,Digital Engineering,Master,2,500,66.2,750,75,550,0.92
92
+ Germany,Freiburg,University of Freiburg,Robotics & AI,Master,2,500,67.5,800,75,550,0.92
93
+ USA,Philadelphia,University of Pennsylvania,Computer Science,Master,2,51900,76.8,1900,160,1500,1.00
94
+ USA,Chicago,University of Chicago,Data Analytics,Master,2,52400,78.9,2000,160,1500,1.00
95
+ USA,Baltimore,Johns Hopkins,Artificial Intelligence,PhD,5,53600,72.5,1700,160,1500,1.00
96
+ USA,Nashville,Vanderbilt University,Computer Engineering,Bachelor,4,50800,71.2,1600,160,1500,1.00
97
+ USA,Durham,Duke University,Software Engineering,Master,2,51500,70.8,1500,160,1500,1.00
98
+ USA,Madison,University of Wisconsin,Computer Science,PhD,5,38200,69.5,1400,160,1500,1.00
99
+ USA,Tempe,Arizona State University,Information Technology,Bachelor,4,41200,70.2,1300,160,1500,1.00
100
+ USA,Boulder,University of Colorado,Data Science,Master,2,39800,71.5,1600,160,1500,1.00
101
+ USA,Minneapolis,University of Minnesota,Computer Science,Bachelor,4,42500,72.8,1500,160,1500,1.00
102
+ USA,Davis,UC Davis,Computer Engineering,Master,2,42800,73.5,1700,160,1500,1.00
103
+ UK,London,University College London,Computer Science,Master,1,39200,76.2,1900,485,800,0.79
104
+ UK,Leeds,University of Leeds,Software Engineering,Bachelor,3,28500,65.8,950,485,800,0.79
105
+ UK,Warwick,University of Warwick,Data Science,Master,1,36800,67.2,1000,485,800,0.79
106
+ UK,Sheffield,University of Sheffield,Artificial Intelligence,PhD,3,27900,64.5,850,485,800,0.79
107
+ UK,Birmingham,University of Birmingham,Computer Engineering,Bachelor,3,29500,66.8,950,485,800,0.79
108
+ UK,Southampton,University of Southampton,Cybersecurity,Master,1,32400,65.9,900,485,800,0.79
109
+ UK,Nottingham,University of Nottingham,Computer Science,Bachelor,3,28900,64.8,850,485,800,0.79
110
+ UK,Cardiff,Cardiff University,Software Development,Master,1,31200,64.2,800,485,800,0.79
111
+ UK,Belfast,Queen's University Belfast,Computing Systems,Bachelor,3,27500,63.5,750,485,800,0.79
112
+ UK,Newcastle,Newcastle University,Data Analytics,Master,1,30800,64.6,800,485,800,0.79
113
+ Canada,Hamilton,McMaster University,Software Engineering,Bachelor,4,32500,68.5,1200,235,900,1.35
114
+ Canada,London ON,Western University,Computer Science,Master,2,29800,65.8,1100,235,900,1.35
115
+ Canada,Halifax,Dalhousie University,Data Science,Master,2,28500,64.5,1200,235,900,1.35
116
+ Canada,Victoria,University of Victoria,Computer Engineering,Bachelor,4,27900,69.2,1300,235,900,1.35
117
+ Canada,Quebec City,Laval University,Artificial Intelligence,Master,2,21500,63.8,900,235,900,1.35
118
+ Canada,Winnipeg,University of Manitoba,Computer Science,Bachelor,4,26800,62.5,950,235,900,1.35
119
+ Canada,Regina,University of Regina,Software Systems,Bachelor,4,25500,61.8,900,235,900,1.35
120
+ Canada,St. John's,Memorial University,Computer Science,Master,2,19800,63.2,950,235,900,1.35
121
+ Canada,Saskatoon,University of Saskatchewan,Data Analytics,Master,2,24500,62.8,1000,235,900,1.35
122
+ Canada,Sherbrooke,Université de Sherbrooke,Computer Engineering,PhD,4,20500,61.5,850,235,900,1.35
123
+ USA,Pittsburgh,Carnegie Mellon,Computer Science,Master,2,51200,72.4,1800,160,1500,1.00
124
+ USA,Urbana-Champaign,UIUC,Computer Science,PhD,5,45800,68.5,1400,160,1500,1.00
125
+ Canada,Calgary,University of Calgary,Software Engineering,Bachelor,4,26500,69.2,1300,235,900,1.35
126
+ Brazil,Sao Paulo,University of Sao Paulo,Computer Science,Master,2,0,48.5,600,160,400,4.95
127
+ Turkey,Istanbul,Bogazici University,Computer Engineering,Bachelor,4,1800,42.8,450,100,300,30.5
128
+ Russia,Moscow,Moscow State University,Applied Mathematics,Master,2,3900,51.2,700,120,350,92.8
129
+ Mexico,Mexico City,UNAM,Computer Engineering,Bachelor,4,800,44.6,500,160,400,17.2
130
+ Greece,Athens,National Technical University,Software Engineering,Master,2,2500,54.8,550,120,400,0.92
131
+ Thailand,Bangkok,Chulalongkorn University,Computer Science,Bachelor,4,3800,46.5,450,140,300,35.2
132
+ UAE,Dubai,American University in Dubai,Computer Science,Bachelor,4,29500,72.4,1200,270,800,3.67
133
+ USA,New York,Columbia University,Data Science,Master,2,52800,100.0,2500,160,1500,1.00
134
+ USA,Ithaca,Cornell University,Computer Science,PhD,5,49800,70.5,1600,160,1500,1.00
135
+ China,Shenzhen,SUSTech,Artificial Intelligence,Master,2,8200,58.4,800,140,400,7.18
136
+ South Africa,Cape Town,University of Cape Town,Computer Science,Bachelor,3,5900,49.2,600,140,400,18.72
137
+ Egypt,Cairo,American University in Cairo,Computer Engineering,Bachelor,4,19800,38.4,450,130,350,30.90
138
+ Argentina,Buenos Aires,University of Buenos Aires,Software Engineering,Bachelor,5,0,42.6,400,150,300,821.5
139
+ Indonesia,Jakarta,University of Indonesia,Information Systems,Bachelor,4,4200,45.8,500,130,300,15640
140
+ Saudi Arabia,Riyadh,King Saud University,Computer Science,Master,2,7800,52.4,800,250,600,3.75
141
+ Nigeria,Lagos,University of Lagos,Computer Engineering,Bachelor,4,2500,40.2,400,180,300,860.2
142
+ Vietnam,Ho Chi Minh City,HCMUT,Software Engineering,Bachelor,4,3200,43.6,450,120,250,24450
143
+ Netherlands,Eindhoven,TU Eindhoven,Computer Science,Master,2,15600,69.8,950,180,720,0.92
144
+ Netherlands,Enschede,University of Twente,Artificial Intelligence,Bachelor,3,11200,65.4,750,180,720,0.92
145
+ Netherlands,Groningen,University of Groningen,Computing Science,Master,2,14800,66.8,800,180,720,0.92
146
+ Netherlands,Maastricht,Maastricht University,Data Science,Bachelor,3,11500,67.2,850,180,720,0.92
147
+ Netherlands,Nijmegen,Radboud University,Software Science,Master,2,14500,66.5,800,180,720,0.92
148
+ Netherlands,Tilburg,Tilburg University,Information Systems,Bachelor,3,11300,65.8,750,180,720,0.92
149
+ Netherlands,Utrecht,Utrecht University,Game Technology,Master,2,15200,70.2,1000,180,720,0.92
150
+ Netherlands,Leiden,Leiden University,Computer Engineering,Bachelor,3,11400,69.5,950,180,720,0.92
151
+ Netherlands,Wageningen,Wageningen University,Bioinformatics,Master,2,14900,65.2,750,180,720,0.92
152
+ Netherlands,Amsterdam,VU Amsterdam,Business Analytics,Master,2,15400,73.5,1100,180,720,0.92
153
+ Singapore,Singapore,Nanyang Technological University,Computer Science,Bachelor,4,32500,81.1,1500,90,800,1.34
154
+ Singapore,Singapore,Singapore Management University,Information Systems,Bachelor,4,31800,81.1,1500,90,800,1.34
155
+ Singapore,Singapore,SUTD,Computer Science & Design,Bachelor,4,31200,81.1,1500,90,800,1.34
156
+ Singapore,Singapore,SIT,Software Engineering,Bachelor,4,29800,81.1,1500,90,800,1.34
157
+ Singapore,Singapore,NUS,Artificial Intelligence,Master,2,35600,81.1,1500,90,800,1.34
158
+ Singapore,Singapore,NTU,Data Science & AI,Master,2,34900,81.1,1500,90,800,1.34
159
+ Singapore,Singapore,SUTD,Technology & Innovation,Master,2,33800,81.1,1500,90,800,1.34
160
+ Singapore,Singapore,SMU,Computing & Innovation,Master,2,34200,81.1,1500,90,800,1.34
161
+ Singapore,Singapore,NUS,Computer Engineering,PhD,4,38500,81.1,1500,90,800,1.34
162
+ Singapore,Singapore,NTU,Digital Systems & AI,PhD,4,37900,81.1,1500,90,800,1.34
163
+ France,Paris,École Polytechnique,Computer Science,Master,2,15600,74.6,1500,99,650,0.92
164
+ France,Toulouse,INSA Toulouse,Software Engineering,Bachelor,3,4200,65.8,750,99,650,0.92
165
+ France,Lyon,École Normale Supérieure Lyon,Data Science,Master,2,4800,68.5,850,99,650,0.92
166
+ France,Grenoble,Grenoble INP,Artificial Intelligence,Master,2,4500,66.4,800,99,650,0.92
167
+ France,Nice,Université Nice Sophia Antipolis,Computer Engineering,Bachelor,3,3900,69.2,900,99,650,0.92
168
+ France,Bordeaux,University of Bordeaux,Information Systems,Master,2,4200,67.8,850,99,650,0.92
169
+ France,Lille,Université de Lille,Software Development,Bachelor,3,3800,65.5,750,99,650,0.92
170
+ France,Rennes,INSA Rennes,Cybersecurity,Master,2,4500,64.8,700,99,650,0.92
171
+ France,Strasbourg,University of Strasbourg,Digital Systems,Bachelor,3,3900,66.2,800,99,650,0.92
172
+ France,Montpellier,University of Montpellier,Data Engineering,Master,2,4100,65.9,750,99,650,0.92
173
+ Switzerland,Lausanne,EPFL,Computer Science,Master,2,1460,89.8,1900,88,1200,0.89
174
+ Switzerland,Geneva,University of Geneva,Data Science,Bachelor,3,1380,90.5,2000,88,1200,0.89
175
+ Switzerland,Bern,University of Bern,Software Engineering,Master,2,1420,85.4,1700,88,1200,0.89
176
+ Switzerland,St. Gallen,University of St. Gallen,Business Informatics,Bachelor,3,1440,86.2,1600,88,1200,0.89
177
+ Switzerland,Lugano,USI,Artificial Intelligence,Master,2,1460,84.5,1500,88,1200,0.89
178
+ Switzerland,Fribourg,University of Fribourg,Computer Engineering,Bachelor,3,1380,83.8,1400,88,1200,0.89
179
+ Switzerland,Neuchatel,University of Neuchatel,Information Systems,Master,2,1420,84.2,1500,88,1200,0.89
180
+ Switzerland,Basel,University of Basel,Computational Science,Master,2,1440,87.5,1800,88,1200,0.89
181
+ Switzerland,Lucerne,University of Lucerne,Digital Innovation,Bachelor,3,1380,85.8,1600,88,1200,0.89
182
+ Switzerland,Winterthur,ZHAW,Data Engineering,Master,2,1460,86.4,1700,88,1200,0.89
183
+ Denmark,Copenhagen,University of Copenhagen,Computer Science,Master,2,8800,83.2,1500,110,600,0.15
184
+ Denmark,Aarhus,Aarhus University,Data Science,Master,2,8600,77.4,1200,110,600,0.15
185
+ Denmark,Aalborg,Aalborg University,Software Engineering,Master,2,8400,75.1,1000,110,600,0.15
186
+ China,Beijing,Tsinghua University,Computer Science,Master,3,8900,51.2,800,140,400,7.15
187
+ China,Beijing,Peking University,Data Science,Master,3,8500,51.2,750,140,400,7.15
188
+ China,Shanghai,Fudan University,Software Engineering,Master,2.5,7800,48.9,700,140,400,7.15
189
+ China,Shanghai,Shanghai Jiao Tong University,Artificial Intelligence,Master,2.5,8200,48.9,720,140,400,7.15
190
+ China,Hangzhou,Zhejiang University,Computer Engineering,Master,3,7500,45.3,550,140,400,7.15
191
+ China,Nanjing,Nanjing University,Information Technology,Master,3,7200,44.1,500,140,400,7.15
192
+ China,Guangzhou,Sun Yat-sen University,Computer Science,Master,3,6900,43.8,480,140,400,7.15
193
+ China,Wuhan,Wuhan University,Software Engineering,Master,3,6500,41.2,450,140,400,7.15
194
+ China,Xi'an,Xi'an Jiaotong University,Data Science,Master,3,6300,40.5,420,140,400,7.15
195
+ China,Chengdu,Sichuan University,Computer Engineering,Master,3,6100,39.8,400,140,400,7.15
196
+ South Korea,Seoul,Seoul National University,Computer Science,Master,2,7200,85.1,950,90,800,1300
197
+ South Korea,Seoul,Korea University,Artificial Intelligence,Master,2,7000,85.1,920,90,800,1300
198
+ South Korea,Seoul,Yonsei University,Data Science,Master,2,6900,85.1,900,90,800,1300
199
+ South Korea,Seoul,Hanyang University,Software Engineering,Master,2,6500,85.1,850,90,800,1300
200
+ South Korea,Seoul,Sungkyunkwan University,Computer Engineering,Master,2,6400,85.1,840,90,800,1300
201
+ South Korea,Daejeon,KAIST,Robotics Engineering,Master,2,6800,75.4,700,90,800,1300
202
+ South Korea,Daejeon,Chungnam National University,Information Systems,Master,2,5900,75.4,650,90,800,1300
203
+ South Korea,Busan,Pusan National University,Computer Science,Master,2,5800,73.2,600,90,800,1300
204
+ South Korea,Busan,Dong-A University,Software Engineering,Master,2,5600,73.2,580,90,800,1300
205
+ South Korea,Daegu,Kyungpook National University,Data Analytics,Master,2,5500,71.8,550,90,800,1300
206
+ South Korea,Daegu,Yeungnam University,Computer Engineering,Master,2,5400,71.8,530,90,800,1300
207
+ South Korea,Gwangju,Chonnam National University,Information Technology,Master,2,5300,70.5,520,90,800,1300
208
+ South Korea,Gwangju,Chosun University,Computer Science,Master,2,5200,70.5,500,90,800,1300
209
+ South Korea,Ulsan,Ulsan National Institute of Science and Technology,AI Engineering,Master,2,6100,72.3,580,90,800,1300
210
+ South Korea,Ulsan,University of Ulsan,Software Systems,Master,2,5100,72.3,550,90,800,1300
211
+ South Korea,Pohang,POSTECH,Computer Engineering,Master,2,6300,71.2,570,90,800,1300
212
+ South Korea,Incheon,Incheon National University,Data Science,Master,2,5000,76.4,600,90,800,1300
213
+ South Korea,Suwon,Sungkyunkwan University (Suwon),Computer Systems,Master,2,5900,77.8,650,90,800,1300
214
+ South Korea,Daejeon,Hanbat National University,Information Security,Master,2,4900,75.4,540,90,800,1300
215
+ South Korea,Cheongju,Chungbuk National University,Computer Networks,Master,2,4800,70.1,520,90,800,1300
216
+ USA,Stanford,Stanford University,Computer Science,Bachelor,4,57000,95.2,2400,160,1500,1.00
217
+ USA,Cambridge,MIT,Computer Science,Bachelor,4,55800,83.5,2300,160,1500,1.00
218
+ USA,New Haven,Yale University,Computer Science,Bachelor,4,54500,79.8,2100,160,1500,1.00
219
+ USA,Princeton,Princeton University,Computer Science,Bachelor,4,54000,81.2,2000,160,1500,1.00
220
+ USA,Philadelphia,University of Pennsylvania,Computer Science,Bachelor,4,53500,82.4,1900,160,1500,1.00
221
+ USA,Los Angeles,UCLA,Computer Science,Bachelor,4,43000,88.7,2200,160,1500,1.00
222
+ USA,Berkeley,UC Berkeley,Computer Science,Bachelor,4,43500,91.5,2300,160,1500,1.00
223
+ USA,Ann Arbor,University of Michigan,Computer Science,Bachelor,4,52000,75.4,1700,160,1500,1.00
224
+ USA,Austin,University of Texas Austin,Computer Science,Bachelor,4,40500,72.8,1800,160,1500,1.00
225
+ USA,Seattle,University of Washington,Computer Science,Bachelor,4,39800,85.6,2000,160,1500,1.00
226
+ USA,Madison,University of Wisconsin-Madison,Computer Science,Bachelor,4,37500,71.2,1600,160,1500,1.00
227
+ USA,Urbana,University of Illinois Urbana-Champaign,Computer Science,Bachelor,4,36800,70.5,1500,160,1500,1.00
228
+ USA,Atlanta,Georgia Tech,Computer Science,Bachelor,4,33500,76.8,1700,160,1500,1.00
229
+ USA,Columbus,Ohio State University,Computer Science,Bachelor,4,32800,71.4,1400,160,1500,1.00
230
+ USA,West Lafayette,Purdue University,Computer Science,Bachelor,4,31500,68.9,1300,160,1500,1.00
231
+ USA,Gainesville,University of Florida,Computer Science,Bachelor,4,28500,70.2,1400,160,1500,1.00
232
+ USA,Tempe,Arizona State University,Computer Science,Bachelor,4,28000,72.5,1500,160,1500,1.00
233
+ USA,Raleigh,NC State University,Computer Science,Bachelor,4,27500,71.8,1400,160,1500,1.00
234
+ USA,College Station,Texas A&M University,Computer Science,Bachelor,4,27000,69.5,1300,160,1500,1.00
235
+ USA,Corvallis,Oregon State University,Computer Science,Bachelor,4,26500,70.1,1300,160,1500,1.00
236
+ UK,Cambridge,University of Cambridge,Computer Science,Bachelor,3,38500,78.5,1800,490,800,0.79
237
+ UK,Oxford,University of Oxford,Computer Science,Bachelor,3,37900,77.8,1850,490,800,0.79
238
+ UK,London,Imperial College London,Computer Science,Bachelor,3,37500,83.2,2200,490,800,0.79
239
+ UK,London,University College London,Computer Science,Bachelor,3,36800,83.2,2100,490,800,0.79
240
+ UK,London,King's College London,Computer Science,Bachelor,3,35500,83.2,2000,490,800,0.79
241
+ UK,Edinburgh,University of Edinburgh,Computer Science,Bachelor,4,32500,75.4,1600,490,800,0.79
242
+ UK,Manchester,University of Manchester,Computer Science,Bachelor,3,31800,72.1,1400,490,800,0.79
243
+ UK,Bristol,University of Bristol,Computer Science,Bachelor,3,31500,74.8,1500,490,800,0.79
244
+ UK,Warwick,University of Warwick,Computer Science,Bachelor,3,31200,71.5,1300,490,800,0.79
245
+ UK,Glasgow,University of Glasgow,Computer Science,Bachelor,4,30800,73.2,1400,490,800,0.79
246
+ UK,Birmingham,University of Birmingham,Computer Science,Bachelor,3,30500,71.8,1300,490,800,0.79
247
+ UK,Leeds,University of Leeds,Computer Science,Bachelor,3,30200,71.2,1250,490,800,0.79
248
+ UK,Sheffield,University of Sheffield,Computer Science,Bachelor,3,29800,70.5,1200,490,800,0.79
249
+ UK,Nottingham,University of Nottingham,Computer Science,Bachelor,3,29500,70.8,1150,490,800,0.79
250
+ UK,Southampton,University of Southampton,Computer Science,Bachelor,3,29200,72.4,1300,490,800,0.79
251
+ UK,Durham,Durham University,Computer Science,Bachelor,3,28900,71.6,1250,490,800,0.79
252
+ UK,Liverpool,University of Liverpool,Computer Science,Bachelor,3,28600,70.2,1100,490,800,0.79
253
+ UK,Cardiff,Cardiff University,Computer Science,Bachelor,3,28300,69.8,1050,490,800,0.79
254
+ UK,Newcastle,Newcastle University,Computer Science,Bachelor,3,28000,70.1,1100,490,800,0.79
255
+ UK,Aberdeen,University of Aberdeen,Computer Science,Bachelor,4,27700,69.5,1000,490,800,0.79
256
+ UK,Leicester,University of Leicester,Computer Science,Bachelor,3,27400,68.9,950,490,800,0.79
257
+ UK,Reading,University of Reading,Computer Science,Bachelor,3,27100,71.2,1150,490,800,0.79
258
+ UK,Sussex,University of Sussex,Computer Science,Bachelor,3,26800,72.5,1200,490,800,0.79
259
+ UK,Essex,University of Essex,Computer Science,Bachelor,3,26500,69.8,1000,490,800,0.79
260
+ UK,Bath,University of Bath,Computer Science,Bachelor,3,26200,73.4,1250,490,800,0.79
261
+ UK,Surrey,University of Surrey,Computer Science,Bachelor,3,25900,71.8,1150,490,800,0.79
262
+ UK,Exeter,University of Exeter,Computer Science,Bachelor,3,25600,72.1,1200,490,800,0.79
263
+ UK,Kent,University of Kent,Computer Science,Bachelor,3,25300,70.5,1100,490,800,0.79
264
+ UK,Dundee,University of Dundee,Computer Science,Bachelor,4,25000,68.9,950,490,800,0.79
265
+ UK,Strathclyde,University of Strathclyde,Computer Science,Bachelor,4,24700,69.2,1000,490,800,0.79
266
+ UK,Heriot-Watt,Heriot-Watt University,Computer Science,Bachelor,4,24400,69.5,1050,490,800,0.79
267
+ UK,Loughborough,Loughborough University,Computer Science,Bachelor,3,24100,68.5,900,490,800,0.79
268
+ UK,Brunel,Brunel University London,Computer Science,Bachelor,3,23800,83.2,1800,490,800,0.79
269
+ UK,Queen Mary,Queen Mary University of London,Computer Science,Bachelor,3,23500,83.2,1900,490,800,0.79
270
+ UK,Royal Holloway,Royal Holloway University,Computer Science,Bachelor,3,23200,75.5,1400,490,800,0.79
271
+ UK,Lancaster,Lancaster University,Computer Science,Bachelor,3,22900,69.8,1000,490,800,0.79
272
+ UK,Swansea,Swansea University,Computer Science,Bachelor,3,22600,68.5,950,490,800,0.79
273
+ UK,Aston,Aston University,Computer Science,Bachelor,3,22300,71.8,1200,490,800,0.79
274
+ UK,Hull,University of Hull,Computer Science,Bachelor,3,22000,67.9,850,490,800,0.79
275
+ UK,Keele,Keele University,Computer Science,Bachelor,3,21700,67.5,800,490,800,0.79
276
+ UK,Plymouth,University of Plymouth,Computer Science,Bachelor,3,21400,69.2,950,490,800,0.79
277
+ UK,Portsmouth,University of Portsmouth,Computer Science,Bachelor,3,21100,70.5,1000,490,800,0.79
278
+ UK,Ulster,Ulster University,Computer Science,Bachelor,3,20800,67.2,800,490,800,0.79
279
+ UK,Northumbria,Northumbria University,Computer Science,Bachelor,3,20500,68.5,900,490,800,0.79
280
+ UK,Coventry,Coventry University,Computer Science,Bachelor,3,20200,69.8,950,490,800,0.79
281
+ UK,Oxford Brookes,Oxford Brookes University,Computer Science,Bachelor,3,19900,77.8,1500,490,800,0.79
282
+ UK,De Montfort,De Montfort University,Computer Science,Bachelor,3,19600,68.9,900,490,800,0.79
283
+ UK,Westminster,University of Westminster,Computer Science,Bachelor,3,19300,83.2,1800,490,800,0.79
284
+ UK,Greenwich,University of Greenwich,Computer Science,Bachelor,3,19000,83.2,1700,490,800,0.79
285
+ UK,Kingston,Kingston University,Computer Science,Bachelor,3,18700,83.2,1600,490,800,0.79
286
+ Canada,Toronto,University of Toronto,Computer Science,Bachelor,4,45200,73.5,1800,235,600,1.35
287
+ Canada,Toronto,University of Toronto,Computer Science,Master,2,28500,73.5,1800,235,600,1.35
288
+ Canada,Vancouver,University of British Columbia,Computer Science,Bachelor,4,43800,71.2,1900,235,600,1.35
289
+ Canada,Vancouver,University of British Columbia,Computer Science,Master,2,27900,71.2,1900,235,600,1.35
290
+ Canada,Montreal,McGill University,Computer Science,Bachelor,4,41500,65.8,1500,235,600,1.35
291
+ Canada,Montreal,McGill University,Computer Science,Master,2,26800,65.8,1500,235,600,1.35
292
+ Canada,Waterloo,University of Waterloo,Computer Science,Bachelor,4,40900,62.4,1300,235,600,1.35
293
+ Canada,Waterloo,University of Waterloo,Computer Science,Master,2,26200,62.4,1300,235,600,1.35
294
+ Canada,Montreal,University of Montreal,Computer Science,Bachelor,4,39500,65.8,1400,235,600,1.35
295
+ Canada,Montreal,University of Montreal,Computer Science,Master,2,25800,65.8,1400,235,600,1.35
296
+ Canada,Edmonton,University of Alberta,Computer Science,Bachelor,4,38200,61.9,1200,235,600,1.35
297
+ Canada,Edmonton,University of Alberta,Computer Science,Master,2,24900,61.9,1200,235,600,1.35
298
+ Canada,Ottawa,University of Ottawa,Computer Science,Bachelor,4,37800,63.5,1400,235,600,1.35
299
+ Canada,Ottawa,University of Ottawa,Computer Science,Master,2,24500,63.5,1400,235,600,1.35
300
+ Canada,Calgary,University of Calgary,Computer Science,Bachelor,4,37200,62.8,1300,235,600,1.35
301
+ Canada,Calgary,University of Calgary,Computer Science,Master,2,24100,62.8,1300,235,600,1.35
302
+ Canada,Hamilton,McMaster University,Computer Science,Bachelor,4,36500,64.2,1250,235,600,1.35
303
+ Canada,Hamilton,McMaster University,Computer Science,Master,2,23800,64.2,1250,235,600,1.35
304
+ Canada,London,Western University,Computer Science,Bachelor,4,35900,61.5,1200,235,600,1.35
305
+ Canada,London,Western University,Computer Science,Master,2,23500,61.5,1200,235,600,1.35
306
+ Canada,Kingston,Queen's University,Computer Science,Bachelor,4,35400,62.1,1300,235,600,1.35
307
+ Canada,Kingston,Queen's University,Computer Science,Master,2,23200,62.1,1300,235,600,1.35
308
+ Canada,Victoria,University of Victoria,Computer Science,Bachelor,4,34800,64.8,1400,235,600,1.35
309
+ Canada,Victoria,University of Victoria,Computer Science,Master,2,22900,64.8,1400,235,600,1.35
310
+ Canada,Halifax,Dalhousie University,Computer Science,Bachelor,4,34200,61.2,1200,235,600,1.35
311
+ Canada,Halifax,Dalhousie University,Computer Science,Master,2,22600,61.2,1200,235,600,1.35
312
+ Canada,Winnipeg,University of Manitoba,Computer Science,Bachelor,4,33600,59.8,1100,235,600,1.35
313
+ Canada,Winnipeg,University of Manitoba,Computer Science,Master,2,22300,59.8,1100,235,600,1.35
314
+ Canada,Quebec City,Laval University,Computer Science,Bachelor,4,33000,58.5,1000,235,600,1.35
315
+ Canada,Quebec City,Laval University,Computer Science,Master,2,22000,58.5,1000,235,600,1.35
316
+ Canada,Saskatoon,University of Saskatchewan,Computer Science,Bachelor,4,32400,58.2,950,235,600,1.35
317
+ Canada,Saskatoon,University of Saskatchewan,Computer Science,Master,2,21700,58.2,950,235,600,1.35
318
+ Canada,St. John's,Memorial University,Computer Science,Bachelor,4,31800,57.9,900,235,600,1.35
319
+ Canada,St. John's,Memorial University,Computer Science,Master,2,21400,57.9,900,235,600,1.35
320
+ Canada,Regina,University of Regina,Computer Science,Bachelor,4,31200,57.5,900,235,600,1.35
321
+ Canada,Regina,University of Regina,Computer Science,Master,2,21100,57.5,900,235,600,1.35
322
+ Canada,Sherbrooke,University of Sherbrooke,Computer Science,Bachelor,4,30600,56.8,850,235,600,1.35
323
+ Canada,Sherbrooke,University of Sherbrooke,Computer Science,Master,2,20800,56.8,850,235,600,1.35
324
+ Canada,Windsor,University of Windsor,Computer Science,Bachelor,4,30000,58.9,950,235,600,1.35
325
+ Canada,Windsor,University of Windsor,Computer Science,Master,2,20500,58.9,950,235,600,1.35
326
+ Canada,Moncton,University of New Brunswick,Computer Science,Bachelor,4,29400,57.2,900,235,600,1.35
327
+ Canada,Moncton,University of New Brunswick,Computer Science,Master,2,20200,57.2,900,235,600,1.35
328
+ Canada,Trois-Rivieres,UQTR,Computer Science,Bachelor,4,28800,56.5,850,235,600,1.35
329
+ Canada,Trois-Rivieres,UQTR,Computer Science,Master,2,19900,56.5,850,235,600,1.35
330
+ Canada,Thunder Bay,Lakehead University,Computer Science,Bachelor,4,28200,56.2,800,235,600,1.35
331
+ Canada,Thunder Bay,Lakehead University,Computer Science,Master,2,19600,56.2,800,235,600,1.35
332
+ Canada,Sudbury,Laurentian University,Computer Science,Bachelor,4,27600,55.8,800,235,600,1.35
333
+ Canada,Sudbury,Laurentian University,Computer Science,Master,2,19300,55.8,800,235,600,1.35
334
+ Canada,Prince George,UNBC,Computer Science,Bachelor,4,27000,55.5,750,235,600,1.35
335
+ Canada,Prince George,UNBC,Computer Science,Master,2,19000,55.5,750,235,600,1.35
336
+ Australia,Melbourne,University of Melbourne,Computer Science,Bachelor,3,42500,72.8,1800,450,650,1.52
337
+ Australia,Melbourne,University of Melbourne,Computer Science,Master,2,45800,72.8,1800,450,650,1.52
338
+ Australia,Melbourne,University of Melbourne,Computer Science,PhD,4,35000,72.8,1800,450,650,1.52
339
+ Australia,Sydney,University of Sydney,Computer Science,Bachelor,3,41800,74.5,2000,450,650,1.52
340
+ Australia,Sydney,University of Sydney,Computer Science,Master,2,44900,74.5,2000,450,650,1.52
341
+ Australia,Sydney,University of Sydney,Computer Science,PhD,4,34500,74.5,2000,450,650,1.52
342
+ Australia,Canberra,Australian National University,Computer Science,Bachelor,3,41200,68.9,1600,450,650,1.52
343
+ Australia,Canberra,Australian National University,Computer Science,Master,2,44200,68.9,1600,450,650,1.52
344
+ Australia,Canberra,Australian National University,Computer Science,PhD,4,34000,68.9,1600,450,650,1.52
345
+ Australia,Brisbane,University of Queensland,Computer Science,Bachelor,3,40500,69.2,1500,450,650,1.52
346
+ Australia,Brisbane,University of Queensland,Computer Science,Master,2,43500,69.2,1500,450,650,1.52
347
+ Australia,Brisbane,University of Queensland,Computer Science,PhD,4,33500,69.2,1500,450,650,1.52
348
+ Australia,Sydney,University of New South Wales,Computer Science,Bachelor,3,40200,74.5,1900,450,650,1.52
349
+ Australia,Sydney,University of New South Wales,Computer Science,Master,2,43200,74.5,1900,450,650,1.52
350
+ Australia,Sydney,University of New South Wales,Computer Science,PhD,4,33200,74.5,1900,450,650,1.52
351
+ Australia,Melbourne,Monash University,Computer Science,Bachelor,3,39800,72.8,1700,450,650,1.52
352
+ Australia,Melbourne,Monash University,Computer Science,Master,2,42800,72.8,1700,450,650,1.52
353
+ Australia,Melbourne,Monash University,Computer Science,PhD,4,32800,72.8,1700,450,650,1.52
354
+ Australia,Adelaide,University of Adelaide,Computer Science,Bachelor,3,39200,67.5,1400,450,650,1.52
355
+ Australia,Adelaide,University of Adelaide,Computer Science,Master,2,42200,67.5,1400,450,650,1.52
356
+ Australia,Adelaide,University of Adelaide,Computer Science,PhD,4,32200,67.5,1400,450,650,1.52
357
+ Australia,Perth,University of Western Australia,Computer Science,Bachelor,3,38800,68.2,1500,450,650,1.52
358
+ Australia,Perth,University of Western Australia,Computer Science,Master,2,41800,68.2,1500,450,650,1.52
359
+ Australia,Perth,University of Western Australia,Computer Science,PhD,4,31800,68.2,1500,450,650,1.52
360
+ Australia,Brisbane,Queensland University of Technology,Computer Science,Bachelor,3,38200,69.2,1400,450,650,1.52
361
+ Australia,Brisbane,Queensland University of Technology,Computer Science,Master,2,41200,69.2,1400,450,650,1.52
362
+ Australia,Brisbane,Queensland University of Technology,Computer Science,PhD,4,31200,69.2,1400,450,650,1.52
363
+ Australia,Sydney,University of Technology Sydney,Computer Science,Bachelor,3,37800,74.5,1800,450,650,1.52
364
+ Australia,Sydney,University of Technology Sydney,Computer Science,Master,2,40800,74.5,1800,450,650,1.52
365
+ Australia,Sydney,University of Technology Sydney,Computer Science,PhD,4,30800,74.5,1800,450,650,1.52
366
+ Australia,Melbourne,RMIT University,Computer Science,Bachelor,3,37200,72.8,1600,450,650,1.52
367
+ Australia,Melbourne,RMIT University,Computer Science,Master,2,40200,72.8,1600,450,650,1.52
368
+ Australia,Melbourne,RMIT University,Computer Science,PhD,4,30200,72.8,1600,450,650,1.52
369
+ Australia,Wollongong,University of Wollongong,Computer Science,Bachelor,3,36800,65.8,1300,450,650,1.52
370
+ Australia,Wollongong,University of Wollongong,Computer Science,Master,2,39800,65.8,1300,450,650,1.52
371
+ Australia,Wollongong,University of Wollongong,Computer Science,PhD,4,29800,65.8,1300,450,650,1.52
372
+ Australia,Newcastle,University of Newcastle,Computer Science,Bachelor,3,36200,66.2,1300,450,650,1.52
373
+ Australia,Newcastle,University of Newcastle,Computer Science,Master,2,39200,66.2,1300,450,650,1.52
374
+ Australia,Newcastle,University of Newcastle,Computer Science,PhD,4,29200,66.2,1300,450,650,1.52
375
+ Australia,Hobart,University of Tasmania,Computer Science,Bachelor,3,35800,64.5,1200,450,650,1.52
376
+ Australia,Hobart,University of Tasmania,Computer Science,Master,2,38800,64.5,1200,450,650,1.52
377
+ Australia,Hobart,University of Tasmania,Computer Science,PhD,4,28800,64.5,1200,450,650,1.52
378
+ Australia,Gold Coast,Griffith University,Computer Science,Bachelor,3,35200,68.5,1400,450,650,1.52
379
+ Australia,Gold Coast,Griffith University,Computer Science,Master,2,38200,68.5,1400,450,650,1.52
380
+ Australia,Gold Coast,Griffith University,Computer Science,PhD,4,28200,68.5,1400,450,650,1.52
381
+ Australia,Canberra,University of Canberra,Computer Science,Bachelor,3,34800,68.9,1500,450,650,1.52
382
+ Australia,Canberra,University of Canberra,Computer Science,Master,2,37800,68.9,1500,450,650,1.52
383
+ Australia,Canberra,University of Canberra,Computer Science,PhD,4,27800,68.9,1500,450,650,1.52
384
+ Australia,Townsville,James Cook University,Computer Science,Bachelor,3,34200,65.2,1200,450,650,1.52
385
+ Australia,Townsville,James Cook University,Computer Science,Master,2,37200,65.2,1200,450,650,1.52
386
+ Australia,Townsville,James Cook University,Computer Science,PhD,4,27200,65.2,1200,450,650,1.52
387
+ Australia,Armidale,University of New England,Computer Science,Bachelor,3,33800,63.8,1100,450,650,1.52
388
+ Australia,Armidale,University of New England,Computer Science,Master,2,36800,63.8,1100,450,650,1.52
389
+ Australia,Armidale,University of New England,Computer Science,PhD,4,26800,63.8,1100,450,650,1.52
390
+ Australia,Toowoomba,University of Southern Queensland,Computer Science,Bachelor,3,33200,64.2,1100,450,650,1.52
391
+ Australia,Toowoomba,University of Southern Queensland,Computer Science,Master,2,36200,64.2,1100,450,650,1.52
392
+ Australia,Toowoomba,University of Southern Queensland,Computer Science,PhD,4,26200,64.2,1100,450,650,1.52
393
+ Australia,Ballarat,Federation University,Computer Science,Bachelor,3,32800,63.5,1000,450,650,1.52
394
+ Australia,Ballarat,Federation University,Computer Science,Master,2,35800,63.5,1000,450,650,1.52
395
+ Australia,Ballarat,Federation University,Computer Science,PhD,4,25800,63.5,1000,450,650,1.52
396
+ Australia,Lismore,Southern Cross University,Computer Science,Bachelor,3,32200,63.2,1000,450,650,1.52
397
+ Australia,Lismore,Southern Cross University,Computer Science,Master,2,35200,63.2,1000,450,650,1.52
398
+ Australia,Lismore,Southern Cross University,Computer Science,PhD,4,25200,63.2,1000,450,650,1.52
399
+ USA,Boston,MIT,Computer Science,Master,2,58000,82.1,2100,160,1500,1.00
400
+ UK,London,Imperial College London,Data Science,Master,1,42000,75.3,1800,485,800,0.79
401
+ Germany,Munich,TU Munich,Mechanical Engineering,Master,2,0,71.5,1200,110,900,0.92
402
+ Canada,Toronto,University of Toronto,Business Analytics,Master,2,45000,73.8,1700,235,750,1.35
403
+ Australia,Melbourne,University of Melbourne,Artificial Intelligence,PhD,4,29000,72.4,1500,450,650,1.52
404
+ USA,Stanford,Stanford University,Physics,PhD,5,52000,84.3,2300,160,1500,1.00
405
+ UK,Edinburgh,University of Edinburgh,Chemistry,Master,2,38000,67.8,1100,485,800,0.79
406
+ Germany,Berlin,Humboldt University,Computer Science,Bachelor,3,0,68.9,950,110,900,0.92
407
+ Canada,Vancouver,University of British Columbia,Environmental Science,Master,2,42000,71.2,1600,235,750,1.35
408
+ Australia,Sydney,University of Sydney,Biotechnology,PhD,4,31000,75.6,1700,450,650,1.52
409
+ USA,Berkeley,UC Berkeley,Mathematics,Master,2,54000,83.2,2000,160,1500,1.00
410
+ UK,Manchester,University of Manchester,Engineering,Bachelor,3,35000,65.4,900,485,800,0.79
411
+ Germany,Hamburg,University of Hamburg,Physics,Master,2,0,69.8,1100,110,900,0.92
412
+ Canada,Montreal,McGill University,Computer Science,PhD,4,38000,68.9,1400,235,750,1.35
413
+ Australia,Brisbane,University of Queensland,Data Science,Master,2,32000,68.7,1200,450,650,1.52
414
+ USA,New York,Columbia University,Economics,Master,2,62000,100,2500,160,1500,1.00
415
+ UK,Oxford,University of Oxford,Computer Science,PhD,4,40000,71.5,1400,485,800,0.79
416
+ Germany,Dresden,TU Dresden,Mechanical Engineering,Bachelor,3,0,65.4,800,110,900,0.92
417
+ Canada,Ottawa,University of Ottawa,Artificial Intelligence,Master,2,40000,67.8,1300,235,750,1.35
418
+ Australia,Perth,University of Western Australia,Physics,Master,2,30000,67.2,1100,450,650,1.52
419
+ USA,Atlanta,Georgia Tech,Engineering,PhD,5,48000,71.2,1700,160,1500,1.00
420
+ UK,Bristol,University of Bristol,Data Science,Master,2,36000,68.9,1200,485,800,0.79
421
+ Germany,Frankfurt,Goethe University,Computer Science,Master,2,0,72.3,1300,110,900,0.92
422
+ Canada,Calgary,University of Calgary,Mathematics,Bachelor,4,35000,65.4,1200,235,750,1.35
423
+ Australia,Adelaide,University of Adelaide,Chemistry,PhD,4,28000,64.5,1000,450,650,1.52
424
+ USA,Los Angeles,UCLA,Computer Science,Master,2,52000,79.8,2200,160,1500,1.00
425
+ UK,Glasgow,University of Glasgow,Physics,Bachelor,3,34000,64.5,950,485,800,0.79
426
+ Germany,Stuttgart,University of Stuttgart,Engineering,Master,2,0,68.7,1100,110,900,0.92
427
+ Canada,Edmonton,University of Alberta,Data Science,Master,2,37000,64.3,1100,235,750,1.35
428
+ Australia,Canberra,Australian National University,Computer Science,PhD,4,33000,69.8,1300,450,650,1.52
429
+ USA,Austin,UT Austin,Mathematics,Master,2,45000,68.9,1600,160,1500,1.00
430
+ UK,Leeds,University of Leeds,Chemistry,PhD,4,35000,63.2,900,485,800,0.79
431
+ Germany,Heidelberg,Heidelberg University,Physics,Bachelor,3,0,67.8,1000,110,900,0.92
432
+ Canada,Halifax,Dalhousie University,Engineering,Master,2,36000,63.4,1000,235,750,1.35
433
+ Australia,Gold Coast,Griffith University,Data Science,Master,2,29000,65.4,1100,450,650,1.52
434
+ USA,Seattle,University of Washington,Computer Science,PhD,5,50000,77.8,2000,160,1500,1.00
435
+ UK,Sheffield,University of Sheffield,Engineering,Master,2,33000,62.3,850,485,800,0.79
436
+ Germany,Cologne,University of Cologne,Mathematics,Master,2,0,69.8,1200,110,900,0.92
437
+ Canada,Quebec City,Laval University,Physics,Bachelor,3,34000,62.1,900,235,750,1.35
438
+ Australia,Newcastle,University of Newcastle,Chemistry,Master,2,27000,63.2,950,450,650,1.52
439
+ USA,Pittsburgh,Carnegie Mellon,Data Science,Master,2,56000,65.4,1500,160,1500,1.00
440
+ UK,Nottingham,University of Nottingham,Computer Science,PhD,4,34000,61.2,800,485,800,0.79
441
+ Germany,Bonn,University of Bonn,Engineering,Master,2,0,67.8,1100,110,900,0.92
442
+ Canada,Victoria,University of Victoria,Mathematics,Master,2,35000,64.5,1100,235,750,1.35
443
+ Australia,Hobart,University of Tasmania,Physics,Bachelor,3,26000,62.1,900,450,650,1.52
444
+ USA,San Diego,UC San Diego,Chemistry,PhD,5,49000,75.6,1900,160,1500,1.00
445
+ UK,Durham,Durham University,Engineering,Master,2,35000,63.4,900,485,800,0.79
446
+ Germany,Aachen,RWTH Aachen,Computer Science,Bachelor,3,0,68.9,1000,110,900,0.92
447
+ Canada,Winnipeg,University of Manitoba,Data Science,Master,2,33000,61.2,900,235,750,1.35
448
+ Australia,Wollongong,University of Wollongong,Mathematics,PhD,4,28000,63.4,950,450,650,1.52
449
+ USA,San Francisco,UC Berkeley Extension,Data Science,Master,2,52000,95.2,2400,160,1500,1.00
450
+ UK,London,King's College London,Computer Science,Master,1,39000,75.3,1900,485,800,0.79
451
+ Switzerland,Zurich,ETH Zurich,Computer Science,Master,2,1500,122.4,2000,140,1200,0.89
452
+ France,Paris,Sorbonne University,Data Analytics,Master,2,4500,84.3,1800,99,850,0.92
453
+ Ireland,Dublin,Trinity College Dublin,Computer Science,PhD,4,18900,83.6,1700,150,750,0.92
454
+ USA,Chicago,University of Chicago,Data Science,Master,2,58000,84.1,1900,160,1500,1.00
455
+ UK,Cambridge,Anglia Ruskin University,Data Analytics,Bachelor,3,35000,71.2,1500,485,800,0.79
456
+ Switzerland,Lausanne,EPFL,Computer Science,PhD,4,1500,119.8,1900,140,1200,0.89
457
+ France,Lyon,University of Lyon,Data Science,Master,2,4200,75.6,1200,99,850,0.92
458
+ Ireland,Cork,University College Cork,Computer Science,Master,2,16800,75.4,1300,150,750,0.92
459
+ USA,Boston,Northeastern University,Data Analytics,Master,2,54000,82.1,2200,160,1500,1.00
460
+ UK,Edinburgh,Heriot-Watt University,Computer Science,Master,1,37000,67.8,1200,485,800,0.79
461
+ Switzerland,Geneva,University of Geneva,Data Science,Master,2,1500,116.5,1800,140,1200,0.89
462
+ France,Toulouse,University of Toulouse,Computer Science,Bachelor,3,4000,71.2,900,99,850,0.92
463
+ Ireland,Galway,NUI Galway,Data Analytics,Master,2,15900,72.3,1100,150,750,0.92
464
+ USA,Seattle,University of Washington,Data Science,PhD,4,51000,77.8,2100,160,1500,1.00
465
+ UK,Birmingham,University of Birmingham,Computer Science,Master,1,36000,65.4,1100,485,800,0.79
466
+ Switzerland,Basel,University of Basel,Data Science,Master,2,1500,114.3,1700,140,1200,0.89
467
+ France,Bordeaux,University of Bordeaux,Data Analytics,Master,2,4300,72.1,1000,99,850,0.92
468
+ Ireland,Limerick,University of Limerick,Computer Science,Bachelor,4,15400,71.2,1000,150,750,0.92
469
+ USA,Austin,UT Austin,Computer Science,Master,2,49000,68.9,1800,160,1500,1.00
470
+ UK,Manchester,University of Salford,Data Science,Master,1,35000,65.4,1000,485,800,0.79
471
+ Switzerland,St. Gallen,University of St. Gallen,Data Analytics,Master,2,1500,112.1,1600,140,1200,0.89
472
+ France,Nice,University of Nice,Computer Science,Master,2,4100,76.5,1300,99,850,0.92
473
+ Ireland,Maynooth,Maynooth University,Data Science,PhD,4,14900,70.1,950,150,750,0.92
474
+ USA,Denver,University of Denver,Data Analytics,Master,2,47000,69.8,1700,160,1500,1.00
475
+ UK,Leeds,Leeds Beckett University,Computer Science,Bachelor,3,34000,63.2,900,485,800,0.79
476
+ Switzerland,Bern,University of Bern,Data Science,Master,2,1500,110.4,1500,140,1200,0.89
477
+ France,Lille,University of Lille,Data Analytics,PhD,4,4200,69.8,950,99,850,0.92
478
+ Ireland,Waterford,Waterford IT,Computer Science,Master,2,14500,68.9,900,150,750,0.92
479
+ USA,Portland,Portland State University,Data Science,Master,2,45000,71.2,1600,160,1500,1.00
480
+ UK,Bristol,UWE Bristol,Computer Science,Master,1,33000,68.9,1100,485,800,0.79
481
+ Switzerland,Lugano,USI Lugano,Data Analytics,Master,2,1500,108.9,1400,140,1200,0.89
482
+ France,Strasbourg,University of Strasbourg,Computer Science,Master,2,4000,70.2,1000,99,850,0.92
483
+ Ireland,Sligo,IT Sligo,Data Science,Bachelor,4,14000,67.5,850,150,750,0.92
484
+ USA,Minneapolis,University of Minnesota,Computer Science,PhD,4,48000,72.3,1700,160,1500,1.00
485
+ UK,Cardiff,Cardiff University,Data Analytics,Master,1,34000,64.5,950,485,800,0.79
486
+ Switzerland,Fribourg,University of Fribourg,Computer Science,Master,2,1500,107.8,1300,140,1200,0.89
487
+ France,Grenoble,Grenoble INP,Data Science,Master,2,4100,71.5,1100,99,850,0.92
488
+ Ireland,Athlone,Athlone IT,Data Analytics,Master,2,13800,66.7,800,150,750,0.92
489
+ Norway,Oslo,University of Oslo,Computer Science,Master,2,0,83.2,1400,275,700,10.45
490
+ Finland,Helsinki,University of Helsinki,Data Science,Master,2,0,79.4,1200,350,650,0.92
491
+ Germany,Berlin,Technical University Berlin,Mechanical Engineering,Master,2,0,68.9,1100,110,900,0.92
492
+ Denmark,Copenhagen,University of Copenhagen,Physics,PhD,4,0,82.1,1500,450,800,7.45
493
+ Norway,Trondheim,NTNU,Robotics,Master,2,0,75.6,1100,275,700,10.45
494
+ Finland,Espoo,Aalto University,Computer Engineering,Bachelor,3,0,77.8,1000,350,650,0.92
495
+ Germany,Munich,LMU Munich,Mathematics,PhD,4,0,71.5,1300,110,900,0.92
496
+ Denmark,Aarhus,Aarhus University,Data Analytics,Master,2,0,76.5,1200,450,800,7.45
497
+ Norway,Bergen,University of Bergen,Artificial Intelligence,Master,2,0,74.3,1200,275,700,10.45
498
+ Finland,Tampere,Tampere University,Software Engineering,Master,2,0,72.1,900,350,650,0.92
499
+ Germany,Dresden,TU Dresden,Computer Science,Bachelor,3,0,65.4,900,110,900,0.92
500
+ Denmark,Odense,University of Southern Denmark,Biotechnology,Master,2,0,73.2,1100,450,800,7.45
501
+ Norway,Tromsø,UiT Arctic University,Marine Technology,PhD,4,0,71.2,1000,275,700,10.45
502
+ Finland,Turku,University of Turku,Bioinformatics,Master,2,0,71.8,850,350,650,0.92
503
+ Germany,Hamburg,TU Hamburg,Electrical Engineering,Master,2,0,69.8,1200,110,900,0.92
504
+ Denmark,Aalborg,Aalborg University,Energy Engineering,Bachelor,3,0,71.5,1000,450,800,7.45
505
+ Norway,Stavanger,University of Stavanger,Petroleum Engineering,Master,2,0,72.4,1100,275,700,10.45
506
+ Finland,Oulu,University of Oulu,Computer Science,PhD,4,0,70.2,800,350,650,0.92
507
+ Germany,Stuttgart,University of Stuttgart,Aerospace Engineering,Master,2,0,68.7,1100,110,900,0.92
508
+ Denmark,Roskilde,Roskilde University,Environmental Science,Master,2,0,70.8,1000,450,800,7.45
509
+ Norway,Ås,Norwegian University of Life Sciences,Biotechnology,Master,2,0,70.5,900,275,700,10.45
510
+ Finland,Vaasa,University of Vaasa,Industrial Management,Master,2,0,69.8,800,350,650,0.92
511
+ Germany,Karlsruhe,KIT,Mechatronics,PhD,4,0,67.9,1000,110,900,0.92
512
+ Denmark,Lyngby,Technical University of Denmark,Quantum Engineering,Master,2,0,81.2,1400,450,800,7.45
513
+ Norway,Bodø,Nord University,Marine Biology,Bachelor,3,0,69.4,850,275,700,10.45
514
+ Finland,Jyväskylä,University of Jyväskylä,Data Science,Master,2,0,68.7,750,350,650,0.92
515
+ Germany,Darmstadt,TU Darmstadt,Computer Engineering,Master,2,0,66.8,950,110,900,0.92
516
+ Denmark,Kolding,University of Southern Denmark,Software Engineering,PhD,4,0,69.5,900,450,800,7.45
517
+ Norway,Gjøvik,NTNU Gjøvik,Information Security,Master,2,0,68.9,800,275,700,10.45
518
+ Finland,Lappeenranta,LUT University,Industrial Engineering,Master,2,0,67.5,700,350,650,0.92
519
+ Germany,Bremen,University of Bremen,Robotics,Master,2,0,66.5,900,110,900,0.92
520
+ Denmark,Esbjerg,University of Southern Denmark,Environmental Engineering,Master,2,0,68.4,850,450,800,7.45
521
+ Norway,Kristiansand,University of Agder,Renewable Energy,PhD,4,0,67.8,850,275,700,10.45
522
+ Finland,Kuopio,University of Eastern Finland,Environmental Science,Bachelor,3,0,66.9,700,350,650,0.92
523
+ Germany,Aachen,RWTH Aachen,Materials Science,Master,2,0,68.9,1000,110,900,0.92
524
+ Denmark,Slagelse,University of Copenhagen,Bioinformatics,Master,2,0,67.5,900,450,800,7.45
525
+ Norway,Horten,University of South-Eastern Norway,Systems Engineering,Master,2,0,66.7,800,275,700,10.45
526
+ Finland,Joensuu,University of Eastern Finland,Forestry Sciences,PhD,4,0,65.8,650,350,650,0.92
527
+ Germany,Jena,University of Jena,Photonics,Master,2,0,65.4,850,110,900,0.92
528
+ Denmark,Herning,Aarhus University,Engineering Management,Master,2,0,66.2,800,450,800,7.45
529
+ New Zealand,Auckland,University of Auckland,Computer Science,Master,2,32000,79.5,1200,330,600,1.65
530
+ USA,Boston,Northeastern University,Data Science,Master,2,54000,82.1,2000,160,1500,1.00
531
+ Sweden,Stockholm,KTH Royal Institute,Engineering Physics,Master,2,0,78.4,1100,120,750,10.45
532
+ Netherlands,Amsterdam,University of Amsterdam,Artificial Intelligence,PhD,4,15000,81.2,1300,171,720,0.92
533
+ Portugal,Lisbon,University of Lisbon,Computer Engineering,Master,2,7000,65.8,800,75,400,0.92
534
+ New Zealand,Wellington,Victoria University,Data Analytics,Master,2,30000,75.6,1100,330,600,1.65
535
+ USA,Austin,UT Austin,Robotics,PhD,5,48000,68.9,1600,160,1500,1.00
536
+ Sweden,Uppsala,Uppsala University,Mathematics,Bachelor,3,0,72.3,900,120,750,10.45
537
+ Netherlands,Rotterdam,Erasmus University,Business Analytics,Master,2,14500,77.8,1200,171,720,0.92
538
+ Portugal,Porto,University of Porto,Software Engineering,Master,2,6500,62.4,700,75,400,0.92
539
+ New Zealand,Christchurch,University of Canterbury,Mechanical Engineering,PhD,4,31000,72.4,950,330,600,1.65
540
+ USA,San Diego,UC San Diego,Biotechnology,Master,2,49000,75.6,1900,160,1500,1.00
541
+ Sweden,Gothenburg,Chalmers University,Sustainable Energy,Master,2,0,71.2,950,120,750,10.45
542
+ Netherlands,Delft,TU Delft,Computer Science,Master,2,15500,76.5,1100,171,720,0.92
543
+ Portugal,Coimbra,University of Coimbra,Data Science,Bachelor,3,6000,58.9,600,75,400,0.92
544
+ New Zealand,Dunedin,University of Otago,Information Systems,Master,2,29000,70.2,900,330,600,1.65
545
+ USA,Seattle,University of Washington,Computer Engineering,Master,2,51000,77.8,2100,160,1500,1.00
546
+ Sweden,Lund,Lund University,Physics,PhD,4,0,73.4,1000,120,750,10.45
547
+ Netherlands,Eindhoven,TU Eindhoven,Artificial Intelligence,Master,2,14800,72.3,950,171,720,0.92
548
+ Portugal,Braga,University of Minho,Computer Science,Master,2,6200,57.8,550,75,400,0.92
549
+ New Zealand,Hamilton,University of Waikato,Environmental Science,Master,2,28500,68.9,850,330,600,1.65
550
+ USA,Atlanta,Georgia Tech,Machine Learning,PhD,5,48000,71.2,1700,160,1500,1.00
551
+ Sweden,Linköping,Linköping University,Computer Science,Master,2,0,69.8,850,120,750,10.45
552
+ Netherlands,Utrecht,Utrecht University,Data Science,Bachelor,3,13900,75.4,1100,171,720,0.92
553
+ Portugal,Aveiro,University of Aveiro,Robotics,PhD,4,6800,56.7,500,75,400,0.92
554
+ New Zealand,Palmerston North,Massey University,Computer Engineering,Bachelor,3,27500,67.5,800,330,600,1.65
555
+ USA,Pittsburgh,Carnegie Mellon,Software Engineering,Master,2,56000,65.4,1500,160,1500,1.00
556
+ Sweden,Umeå,Umeå University,Artificial Intelligence,Master,2,0,68.5,800,120,750,10.45
557
+ Netherlands,Groningen,University of Groningen,Computing Science,PhD,4,14200,71.2,900,171,720,0.92
558
+ Portugal,Faro,University of Algarve,Information Systems,Master,2,5900,55.4,480,75,400,0.92
559
+ New Zealand,Auckland,AUT University,Data Analytics,Master,2,29500,79.5,1150,330,600,1.65
560
+ USA,Raleigh,NC State University,Computer Science,Master,2,47000,67.8,1400,160,1500,1.00
561
+ Sweden,Karlstad,Karlstad University,Information Systems,Bachelor,3,0,67.2,750,120,750,10.45
562
+ Netherlands,Tilburg,Tilburg University,Data Science,Master,2,14000,70.5,950,171,720,0.92
563
+ Portugal,Vila Real,UTAD,Computer Engineering,Master,2,5700,54.3,450,75,400,0.92
564
+ New Zealand,Christchurch,Lincoln University,Environmental Computing,PhD,4,28000,72.4,900,330,600,1.65
565
+ USA,Davis,UC Davis,Data Science,Master,2,48000,73.2,1600,160,1500,1.00
566
+ Sweden,Växjö,Linnaeus University,Software Engineering,Master,2,0,66.5,700,120,750,10.45
567
+ Netherlands,Wageningen,Wageningen University,Bioinformatics,Master,2,14500,69.8,900,171,720,0.92
568
+ Portugal,Funchal,University of Madeira,Computing,Bachelor,3,5500,53.2,400,75,400,0.92
569
+ Spain,Madrid,Universidad Politécnica de Madrid,Computer Science,Master,2,3500,71.4,1100,80,750,0.92
570
+ Italy,Milan,Politecnico di Milano,Data Engineering,Master,2,4000,73.2,1200,120,700,0.92
571
+ Greece,Athens,National Technical University,Electrical Engineering,PhD,4,0,65.8,650,100,600,0.92
572
+ Austria,Vienna,TU Wien,Software Engineering,Master,2,1500,78.5,950,160,850,0.92
573
+ Mexico,Mexico City,UNAM,Computer Engineering,Bachelor,4,800,52.4,600,40,400,17.05
574
+ Spain,Barcelona,Universitat Politècnica Catalunya,Artificial Intelligence,Master,2,3800,73.6,1000,80,750,0.92
575
+ Italy,Rome,Sapienza University,Robotics,PhD,4,3500,71.2,1100,120,700,0.92
576
+ Greece,Thessaloniki,Aristotle University,Computer Engineering,Master,2,0,62.4,500,100,600,0.92
577
+ Austria,Graz,TU Graz,Mechanical Engineering,Bachelor,3,1500,71.2,750,160,850,0.92
578
+ Mexico,Monterrey,Tecnológico de Monterrey,Data Science,Master,2,12000,48.9,700,40,400,17.05
579
+ Spain,Valencia,Universitat de València,Data Science,Master,2,3200,68.5,800,80,750,0.92
580
+ Italy,Turin,Politecnico di Torino,Computer Engineering,Master,2,3800,69.8,900,120,700,0.92
581
+ Greece,Patras,University of Patras,Electronics,PhD,4,0,60.5,450,100,600,0.92
582
+ Austria,Linz,Johannes Kepler University,Artificial Intelligence,Master,2,1500,70.4,700,160,850,0.92
583
+ Mexico,Guadalajara,Universidad de Guadalajara,Software Engineering,Bachelor,4,900,45.6,500,40,400,17.05
584
+ Spain,Seville,Universidad de Sevilla,Robotics,Master,2,3000,65.4,750,80,750,0.92
585
+ Italy,Bologna,University of Bologna,Information Technology,PhD,4,3600,70.5,950,120,700,0.92
586
+ Greece,Heraklion,University of Crete,Computer Science,Master,2,0,61.2,480,100,600,0.92
587
+ Austria,Salzburg,University of Salzburg,Data Analytics,Bachelor,3,1500,72.3,800,160,850,0.92
588
+ Mexico,Puebla,UDLAP,Computer Engineering,Master,2,10000,44.5,450,40,400,17.05
589
+ Spain,Bilbao,University of the Basque Country,Computer Science,PhD,4,3400,67.8,850,80,750,0.92
590
+ Italy,Florence,University of Florence,Cybersecurity,Master,2,3500,71.2,1000,120,700,0.92
591
+ Greece,Volos,University of Thessaly,Digital Systems,Master,2,0,59.8,400,100,600,0.92
592
+ Austria,Innsbruck,University of Innsbruck,Mechatronics,Master,2,1500,71.5,780,160,850,0.92
593
+ Mexico,Queretaro,Tecnologico de Monterrey,Data Analytics,Bachelor,4,11000,46.7,480,40,400,17.05
594
+ Spain,Granada,University of Granada,Artificial Intelligence,Master,2,2800,64.5,700,80,750,0.92
595
+ Italy,Naples,University of Naples,Software Engineering,PhD,4,3200,67.8,800,120,700,0.92
596
+ Greece,Ioannina,University of Ioannina,Information Systems,Bachelor,4,0,58.9,380,100,600,0.92
597
+ Austria,Klagenfurt,University of Klagenfurt,Data Science,Master,2,1500,69.4,720,160,850,0.92
598
+ Mexico,Merida,Universidad Autonoma de Yucatan,Computer Engineering,Master,2,3500,43.2,400,40,400,17.05
599
+ Spain,Zaragoza,University of Zaragoza,Robotics,Master,2,2900,63.2,650,80,750,0.92
600
+ Italy,Pisa,University of Pisa,Computer Engineering,Master,2,3300,68.9,850,120,700,0.92
601
+ Greece,Rhodes,University of the Aegean,Digital Innovation,Master,2,0,61.2,420,100,600,0.92
602
+ Austria,Leoben,Montanuniversität Leoben,Industrial Engineering,PhD,4,1500,68.7,700,160,850,0.92
603
+ Mexico,Tijuana,CETYS Universidad,Information Technology,Bachelor,4,9500,45.4,550,40,400,17.05
604
+ Spain,Salamanca,University of Salamanca,Data Science,PhD,4,3100,62.1,600,80,750,0.92
605
+ Italy,Padua,University of Padua,Artificial Intelligence,Master,2,3400,69.5,900,120,700,0.92
606
+ Greece,Chania,Technical University of Crete,Electronic Engineering,Master,2,0,60.4,450,100,600,0.92
607
+ Austria,Dornbirn,FH Vorarlberg,Software Development,Bachelor,3,1500,70.2,800,160,850,0.92
608
+ Mexico,San Luis Potosi,UASLP,Computer Systems,Master,2,2800,42.8,380,40,400,17.05
609
+ Turkey,Istanbul,Bogazici University,Computer Engineering,Master,2,1500,51.2,600,90,500,28.50
610
+ Greece,Athens,Athens University of Economics,Data Science,Master,2,0,65.8,650,100,600,0.92
611
+ Belgium,Leuven,KU Leuven,Artificial Intelligence,PhD,4,3800,76.5,950,180,800,0.92
612
+ Hungary,Budapest,Budapest University of Technology,Software Engineering,Master,2,6500,53.4,500,140,450,350.25
613
+ Russia,Moscow,Moscow State University,Computer Science,Bachelor,4,5500,62.3,600,160,400,95.50
614
+ Turkey,Ankara,Middle East Technical University,Data Engineering,Master,2,1200,48.5,450,90,500,28.50
615
+ Greece,Thessaloniki,University of Macedonia,Information Systems,PhD,4,0,62.4,500,100,600,0.92
616
+ Belgium,Ghent,Ghent University,Computer Science,Master,2,3500,72.8,850,180,800,0.92
617
+ Hungary,Debrecen,University of Debrecen,Mechatronics,Bachelor,3,5800,48.9,400,140,450,350.25
618
+ Russia,Saint Petersburg,ITMO University,Data Science,Master,2,5000,60.1,550,160,400,95.50
619
+ Turkey,Izmir,Ege University,Electronics Engineering,PhD,4,1300,47.8,400,90,500,28.50
620
+ Greece,Patras,University of Patras,Computer Engineering,Master,2,0,60.5,450,100,600,0.92
621
+ Belgium,Brussels,Vrije Universiteit Brussel,Robotics,Master,2,3600,75.4,900,180,800,0.92
622
+ Hungary,Szeged,University of Szeged,Computer Science,PhD,4,6000,47.2,380,140,450,350.25
623
+ Russia,Novosibirsk,Novosibirsk State University,Mathematics,Master,2,4800,55.4,400,160,400,95.50
624
+ Turkey,Eskisehir,Anadolu University,Information Systems,Bachelor,4,1000,45.6,350,90,500,28.50
625
+ Greece,Heraklion,University of Crete,Data Analytics,Master,2,0,61.2,480,100,600,0.92
626
+ Belgium,Antwerp,University of Antwerp,Computer Science,PhD,4,3700,71.2,800,180,800,0.92
627
+ Hungary,Pecs,University of Pecs,Software Development,Master,2,5500,46.8,350,140,450,350.25
628
+ Russia,Kazan,Kazan Federal University,Artificial Intelligence,Bachelor,4,4500,52.3,380,160,400,95.50
629
+ Turkey,Bursa,Uludag University,Computer Science,Master,2,1100,46.5,380,90,500,28.50
630
+ Greece,Volos,University of Thessaly,Cybersecurity,PhD,4,0,59.8,400,100,600,0.92
631
+ Belgium,Louvain,UCLouvain,Data Engineering,Master,2,3500,70.5,780,180,800,0.92
632
+ Hungary,Gyor,Szechenyi Istvan University,Robotics,Bachelor,3,5200,45.6,320,140,450,350.25
633
+ Russia,Tomsk,Tomsk State University,Software Engineering,Master,2,4600,51.2,350,160,400,95.50
634
+ Turkey,Antalya,Akdeniz University,Data Science,PhD,4,1400,47.8,420,90,500,28.50
635
+ Greece,Piraeus,University of Piraeus,Information Technology,Master,2,0,63.4,550,100,600,0.92
636
+ Belgium,Hasselt,Hasselt University,Artificial Intelligence,Bachelor,3,3400,69.8,750,180,800,0.92
637
+ Hungary,Miskolc,University of Miskolc,Computer Engineering,Master,2,5300,44.5,300,140,450,350.25
638
+ Russia,Yekaterinburg,Ural Federal University,Data Analytics,PhD,4,4700,53.4,400,160,400,95.50
639
+ Turkey,Kayseri,Erciyes University,Software Engineering,Master,2,1200,45.2,350,90,500,28.50
640
+ Greece,Xanthi,Democritus University,Computer Engineering,Bachelor,4,0,58.7,380,100,600,0.92
641
+ Belgium,Liege,University of Liege,Data Science,PhD,4,3600,68.9,720,180,800,0.92
642
+ Hungary,Veszprem,University of Pannonia,Information Systems,Master,2,5100,44.8,310,140,450,350.25
643
+ Russia,Samara,Samara State University,Computer Science,Master,2,4400,50.5,370,160,400,95.50
644
+ Turkey,Konya,Selcuk University,Artificial Intelligence,Bachelor,4,1000,44.5,330,90,500,28.50
645
+ Greece,Chios,University of the Aegean,Digital Systems,Master,2,0,59.2,400,100,600,0.92
646
+ Belgium,Mons,University of Mons,Computer Engineering,Master,2,3500,67.8,700,180,800,0.92
647
+ Hungary,Kecskemet,John von Neumann University,Data Analytics,PhD,4,5400,43.9,290,140,450,350.25
648
+ Russia,Rostov-on-Don,Southern Federal University,Information Technology,Bachelor,4,4200,49.8,350,160,400,95.50
649
+ Brazil,Sao Paulo,University of Sao Paulo,Computer Science,Master,2,0,55.8,600,90,400,4.95
650
+ India,Bangalore,Indian Institute of Science,Data Science,PhD,4,2000,45.2,300,180,300,82.75
651
+ Thailand,Bangkok,Chulalongkorn University,Software Engineering,Master,2,15000,51.4,500,80,350,35.25
652
+ Egypt,Cairo,Cairo University,Computer Engineering,Bachelor,4,2500,31.8,250,100,200,30.90
653
+ Singapore,Singapore,National University of Singapore,Artificial Intelligence,Master,2,42000,83.8,1200,90,800,1.35
654
+ UAE,Dubai,University of Dubai,Data Analytics,Master,2,25000,72.4,1100,270,750,3.67
655
+ Brazil,Rio de Janeiro,PUC-Rio,Information Systems,PhD,4,8000,53.2,550,90,400,4.95
656
+ India,Mumbai,IIT Bombay,Computer Engineering,Master,2,1800,47.5,350,180,300,82.75
657
+ Thailand,Chiang Mai,Chiang Mai University,Data Science,Bachelor,4,12000,45.6,300,80,350,35.25
658
+ Singapore,Singapore,Nanyang Technological University,Computer Science,PhD,4,40000,83.8,1100,90,800,1.35
659
+ UAE,Abu Dhabi,Khalifa University,Robotics,Master,2,27000,71.8,1000,270,750,3.67
660
+ Brazil,Campinas,UNICAMP,Computer Engineering,Master,2,0,51.4,450,90,400,4.95
661
+ India,Delhi,IIT Delhi,Artificial Intelligence,PhD,4,1900,44.8,320,180,300,82.75
662
+ Thailand,Khon Kaen,Khon Kaen University,Information Technology,Master,2,11000,42.5,250,80,350,35.25
663
+ Egypt,Alexandria,Alexandria University,Software Engineering,Master,2,2200,30.5,200,100,200,30.90
664
+ Singapore,Singapore,Singapore Management University,Data Analytics,Bachelor,4,38000,83.8,1150,90,800,1.35
665
+ UAE,Sharjah,American University of Sharjah,Computer Science,PhD,4,26000,68.5,900,270,750,3.67
666
+ Brazil,Porto Alegre,UFRGS,Data Science,Bachelor,4,0,49.8,400,90,400,4.95
667
+ India,Chennai,IIT Madras,Software Engineering,Master,2,1700,42.4,280,180,300,82.75
668
+ Thailand,Phuket,Prince of Songkla University,Computer Engineering,Master,2,10000,44.8,300,80,350,35.25
669
+ Egypt,Giza,Ain Shams University,Data Science,PhD,4,2400,31.2,220,100,200,30.90
670
+ Singapore,Singapore,Singapore University of Technology,Artificial Intelligence,Master,2,39000,83.8,1100,90,800,1.35
671
+ UAE,Ajman,Ajman University,Information Systems,Bachelor,4,23000,65.4,800,270,750,3.67
672
+ Brazil,Recife,UFPE,Computer Engineering,Master,2,0,47.5,350,90,400,4.95
673
+ India,Hyderabad,IIT Hyderabad,Data Analytics,PhD,4,1800,41.2,260,180,300,82.75
674
+ Thailand,Hat Yai,Prince of Songkla University,Software Engineering,Bachelor,4,9500,43.2,280,80,350,35.25
675
+ Egypt,Port Said,Port Said University,Computer Science,Master,2,2100,29.8,180,100,200,30.90
676
+ Singapore,Singapore,SUTD,Robotics,PhD,4,37000,83.8,1050,90,800,1.35
677
+ UAE,Al Ain,UAE University,Data Science,Master,2,24000,64.2,750,270,750,3.67
678
+ Brazil,Florianopolis,UFSC,Information Technology,PhD,4,0,48.9,400,90,400,4.95
679
+ India,Pune,IIT Pune,Computer Science,Master,2,1600,40.5,250,180,300,82.75
680
+ Thailand,Nakhon Ratchasima,Suranaree University,Data Engineering,Master,2,9000,41.8,250,80,350,35.25
681
+ Egypt,Mansoura,Mansoura University,Information Systems,Bachelor,4,2000,28.5,170,100,200,30.90
682
+ Singapore,Singapore,SIM Global Education,Software Engineering,Bachelor,4,35000,83.8,1000,90,800,1.35
683
+ UAE,Ras Al Khaimah,RAK University,Computer Engineering,Master,2,22000,62.5,700,270,750,3.67
684
+ Brazil,Salvador,UFBA,Data Science,Master,2,0,46.8,380,90,400,4.95
685
+ India,Kanpur,IIT Kanpur,Artificial Intelligence,PhD,4,1900,39.8,240,180,300,82.75
686
+ Thailand,Songkhla,Thaksin University,Computer Engineering,Bachelor,4,8500,42.5,270,80,350,35.25
687
+ Egypt,Aswan,Aswan University,Data Analytics,Master,2,1900,27.8,160,100,200,30.90
688
+ UAE,Fujairah,Fujairah University,Information Technology,Bachelor,4,21000,61.4,650,270,750,3.67
689
+ Iceland,Reykjavik,University of Iceland,Computer Science,Master,2,0,84.5,1200,140,900,137.50
690
+ Colombia,Bogota,Universidad Nacional,Software Engineering,Master,2,3500,41.2,400,80,300,3950
691
+ Poland,Warsaw,University of Warsaw,Data Science,PhD,4,3000,54.8,650,80,400,4.10
692
+ Romania,Bucharest,University Politehnica,Computer Engineering,Bachelor,3,2500,45.2,450,120,350,4.65
693
+ Luxembourg,Luxembourg City,University of Luxembourg,Artificial Intelligence,Master,2,400,83.2,1400,100,800,0.92
694
+ Indonesia,Jakarta,University of Indonesia,Information Systems,Master,2,5000,45.8,400,150,250,15600
695
+ Iceland,Akureyri,University of Akureyri,Data Analytics,Bachelor,3,0,78.4,900,140,900,137.50
696
+ Colombia,Medellin,Universidad de Antioquia,Computer Science,PhD,4,4000,38.5,350,80,300,3950
697
+ Poland,Krakow,Jagiellonian University,Software Development,Master,2,2800,52.4,600,80,400,4.10
698
+ Romania,Cluj-Napoca,Babes-Bolyai University,Data Science,Master,2,2200,43.8,400,120,350,4.65
699
+ Luxembourg,Esch-sur-Alzette,Luxembourg School of Business,Data Engineering,Master,2,400,79.5,1200,100,800,0.92
700
+ Indonesia,Bandung,Institut Teknologi Bandung,Computer Engineering,PhD,4,4500,42.4,300,150,250,15600
701
+ Iceland,Reykjavik,Reykjavik University,Robotics,Master,2,0,84.5,1150,140,900,137.50
702
+ Colombia,Cali,Universidad del Valle,Information Technology,Bachelor,4,3200,36.8,300,80,300,3950
703
+ Poland,Wroclaw,Wroclaw University of Technology,Artificial Intelligence,Master,2,2600,50.5,550,80,400,4.10
704
+ Romania,Timisoara,Politehnica University,Software Engineering,PhD,4,2400,42.5,380,120,350,4.65
705
+ Luxembourg,Belval,Luxembourg Institute of Science,Computer Science,Bachelor,3,400,78.4,1100,100,800,0.92
706
+ Indonesia,Yogyakarta,Gadjah Mada University,Data Science,Master,2,4000,40.2,250,150,250,15600
707
+ Iceland,Hafnarfjordur,Iceland University of Arts,Digital Design,Master,2,0,82.1,1000,140,900,137.50
708
+ Colombia,Barranquilla,Universidad del Norte,Computer Engineering,Master,2,3800,35.4,280,80,300,3950
709
+ Poland,Poznan,Adam Mickiewicz University,Computer Science,PhD,4,2700,51.2,580,80,400,4.10
710
+ Romania,Iasi,Alexandru Ioan Cuza University,Information Systems,Master,2,2100,41.8,350,120,350,4.65
711
+ Luxembourg,Kirchberg,Sacred Heart University,Data Analytics,Master,2,400,81.5,1300,100,800,0.92
712
+ Indonesia,Surabaya,Institut Teknologi Sepuluh,Software Engineering,Bachelor,4,3800,41.5,280,150,250,15600
713
+ Iceland,Kopavogur,Bifrost University,Digital Business,Bachelor,3,0,81.2,950,140,900,137.50
714
+ Colombia,Bucaramanga,UIS,Data Science,PhD,4,3500,34.8,260,80,300,3950
715
+ Poland,Gdansk,Gdansk University of Technology,Cybersecurity,Master,2,2500,49.8,520,80,400,4.10
716
+ Romania,Brasov,Transilvania University,Computer Engineering,Bachelor,4,2000,40.5,330,120,350,4.65
717
+ Luxembourg,Differdange,Miami University Dolibois,Information Technology,Master,2,400,77.8,1150,100,800,0.92
718
+ Indonesia,Malang,Brawijaya University,Artificial Intelligence,Master,2,3500,39.8,240,150,250,15600
719
+ Poland,Lodz,Lodz University of Technology,Software Engineering,Master,2,2400,48.5,500,80,400,4.10
720
+ Romania,Constanta,Ovidius University,Data Analytics,Master,2,1900,39.8,320,120,350,4.65
721
+ Luxembourg,Walferdange,European Business University,Digital Innovation,Bachelor,3,400,76.5,1100,100,800,0.92
722
+ Indonesia,Semarang,Diponegoro University,Computer Science,PhD,4,3200,38.5,220,150,250,15600
723
+ Iceland,Borgarnes,Agricultural University,Data Systems,Master,2,0,79.8,900,140,900,137.50
724
+ Colombia,Cartagena,Universidad de Cartagena,Information Systems,Master,2,3300,35.2,290,80,300,3950
725
+ Poland,Katowice,University of Silesia,Computer Engineering,Bachelor,3,2300,47.8,480,80,400,4.10
726
+ Romania,Craiova,University of Craiova,Software Development,PhD,4,2200,38.9,300,120,350,4.65
727
+ Luxembourg,Bertrange,Chamber of Commerce School,Business Analytics,Master,2,400,75.4,1050,100,800,0.92
728
+ Indonesia,Denpasar,Udayana University,Information Technology,Master,2,3000,37.9,200,150,250,15600
729
+ Tunisia,Tunis,University of Tunis,Computer Science,Master,2,1500,35.8,250,60,200,3.15
730
+ Cyprus,Nicosia,University of Cyprus,Data Science,Master,2,8000,65.4,600,100,500,0.92
731
+ Croatia,Zagreb,University of Zagreb,Software Engineering,PhD,4,4000,58.9,450,80,400,7.35
732
+ Dominican Republic,Santo Domingo,INTEC,Computer Engineering,Bachelor,4,6000,42.5,350,100,300,56.80
733
+ Morocco,Rabat,Mohammed V University,Information Systems,Master,2,2000,41.2,300,70,250,10.15
734
+ Peru,Lima,PUCP,Data Analytics,Master,2,8500,44.8,400,120,350,3.75
735
+ Argentina,Buenos Aires,University of Buenos Aires,Computer Science,PhD,4,0,42.5,350,90,280,275.00
736
+ Tunisia,Sfax,University of Sfax,Artificial Intelligence,Master,2,1400,33.2,200,60,200,3.15
737
+ Cyprus,Limassol,Cyprus University of Technology,Software Development,Bachelor,4,7500,62.8,550,100,500,0.92
738
+ Croatia,Split,University of Split,Data Engineering,Master,2,3800,56.4,400,80,400,7.35
739
+ Dominican Republic,Santiago,PUCMM,Information Technology,Master,2,5500,40.2,300,100,300,56.80
740
+ Morocco,Casablanca,Hassan II University,Computer Engineering,PhD,4,2200,43.5,350,70,250,10.15
741
+ Peru,Arequipa,Universidad San Agustin,Software Engineering,Bachelor,4,7000,41.2,300,120,350,3.75
742
+ Argentina,Cordoba,National University of Cordoba,Data Science,Master,2,0,39.8,280,90,280,275.00
743
+ Tunisia,Sousse,University of Sousse,Computer Systems,Bachelor,3,1300,32.5,180,60,200,3.15
744
+ Cyprus,Larnaca,American University Cyprus,Artificial Intelligence,PhD,4,8200,61.5,500,100,500,0.92
745
+ Croatia,Rijeka,University of Rijeka,Information Systems,Master,2,3500,54.8,380,80,400,7.35
746
+ Dominican Republic,La Romana,Universidad Central Este,Computer Science,Bachelor,4,5000,38.5,280,100,300,56.80
747
+ Morocco,Fez,University of Al Quaraouiyine,Data Analytics,Master,2,1800,39.8,250,70,250,10.15
748
+ Peru,Trujillo,Universidad Nacional de Trujillo,Software Development,PhD,4,7500,40.5,280,120,350,3.75
749
+ Argentina,Rosario,National University of Rosario,Computer Engineering,Master,2,0,38.5,260,90,280,275.00
750
+ Tunisia,Monastir,University of Monastir,Data Science,PhD,4,1600,31.8,170,60,200,3.15
751
+ Cyprus,Famagusta,Eastern Mediterranean University,Software Engineering,Master,2,7800,59.8,480,100,500,0.92
752
+ Croatia,Osijek,University of Osijek,Computer Science,Bachelor,3,3200,52.5,350,80,400,7.35
753
+ Dominican Republic,San Pedro,UCNE,Information Systems,Master,2,4800,37.2,260,100,300,56.80
754
+ Morocco,Marrakech,Cadi Ayyad University,Artificial Intelligence,PhD,4,2100,40.5,280,70,250,10.15
755
+ Peru,Cusco,Universidad San Antonio Abad,Data Analytics,Master,2,6800,39.8,260,120,350,3.75
756
+ Argentina,La Plata,National University of La Plata,Software Development,Bachelor,4,0,37.5,240,90,280,275.00
757
+ Tunisia,Gabes,University of Gabes,Computer Engineering,Master,2,1400,30.5,160,60,200,3.15
758
+ Croatia,Zadar,University of Zadar,Information Technology,PhD,4,3600,53.2,370,80,400,7.35
759
+ Cyprus,Paphos,Neapolis University,Data Science,Bachelor,3,7400,58.5,450,100,500,0.92
760
+ Dominican Republic,Puerto Plata,UTESA,Computer Science,PhD,4,4500,36.8,250,100,300,56.80
761
+ Morocco,Tangier,Abdelmalek Essaadi University,Software Engineering,Master,2,1900,38.9,260,70,250,10.15
762
+ Peru,Piura,Universidad de Piura,Information Systems,Master,2,7200,38.5,250,120,350,3.75
763
+ Argentina,Mendoza,National University of Cuyo,Data Analytics,PhD,4,0,36.8,230,90,280,275.00
764
+ Tunisia,Bizerte,University of Carthage,Artificial Intelligence,Bachelor,3,1200,29.8,150,60,200,3.15
765
+ Cyprus,Girne,Girne American University,Computer Engineering,Master,2,7600,57.8,430,100,500,0.92
766
+ Croatia,Dubrovnik,University of Dubrovnik,Software Development,Master,2,3400,54.5,390,80,400,7.35
767
+ Morocco,Oujda,Mohammed I University,Computer Science,Bachelor,4,1700,37.5,240,70,250,10.15
768
+ Peru,Chiclayo,Universidad San Martin,Data Engineering,PhD,4,6500,37.8,240,120,350,3.75
769
+ Ecuador,Quito,Universidad San Francisco,Computer Science,Master,2,8500,45.8,400,100,300,1.00
770
+ Lebanon,Beirut,American University of Beirut,Data Science,Master,2,20000,58.9,600,150,500,15000
771
+ Bahrain,Manama,University of Bahrain,Software Engineering,Bachelor,4,7000,65.4,700,130,600,0.38
772
+ Uruguay,Montevideo,Universidad de la Republica,Computer Engineering,PhD,4,0,52.4,450,90,350,39.50
773
+ Bulgaria,Sofia,Sofia University,Information Systems,Master,2,3500,48.5,400,110,300,1.85
774
+ Ghana,Accra,University of Ghana,Data Analytics,Master,2,4500,42.1,300,120,250,12.00
775
+ Algeria,Algiers,University of Science and Technology,Computer Science,Bachelor,3,1200,38.5,250,80,200,137.50
776
+ Panama,Panama City,Universidad Tecnologica,Artificial Intelligence,Master,2,7500,51.2,600,100,400,1.00
777
+ Ecuador,Guayaquil,ESPOL,Software Development,PhD,4,7800,43.2,350,100,300,1.00
778
+ Lebanon,Byblos,Lebanese American University,Data Engineering,Master,2,18000,55.4,500,150,500,15000
779
+ Bahrain,Riffa,Royal University for Women,Information Technology,Master,2,8000,63.2,650,130,600,0.38
780
+ Uruguay,Salto,Universidad ORT Uruguay,Computer Science,Master,2,6500,48.5,380,90,350,39.50
781
+ Bulgaria,Plovdiv,Plovdiv University,Data Science,Bachelor,3,3200,45.8,350,110,300,1.85
782
+ Ghana,Kumasi,Kwame Nkrumah University,Software Engineering,PhD,4,4200,39.8,250,120,250,12.00
783
+ Algeria,Oran,University of Oran,Computer Engineering,Master,2,1100,36.4,220,80,200,137.50
784
+ Panama,David,ISAE University,Data Analytics,Bachelor,4,6800,47.5,450,100,400,1.00
785
+ Ecuador,Cuenca,Universidad de Cuenca,Information Systems,Master,2,7200,42.5,320,100,300,1.00
786
+ Lebanon,Tripoli,Lebanese University,Computer Science,PhD,4,2000,52.1,400,150,500,15000
787
+ Bahrain,Isa Town,Bahrain Polytechnic,Software Development,Bachelor,4,6500,61.8,600,130,600,0.38
788
+ Uruguay,Maldonado,Universidad Catolica,Data Science,Master,2,7000,49.2,400,90,350,39.50
789
+ Bulgaria,Varna,Technical University Varna,Computer Engineering,Master,2,3100,44.2,330,110,300,1.85
790
+ Ghana,Cape Coast,University of Cape Coast,Information Technology,Master,2,4000,38.5,230,120,250,12.00
791
+ Algeria,Constantine,University of Constantine,Data Analytics,PhD,4,1300,35.8,200,80,200,137.50
792
+ Panama,Santiago,Universidad Latina,Computer Science,Master,2,6500,45.8,400,100,400,1.00
793
+ Ecuador,Loja,UTPL,Artificial Intelligence,Bachelor,3,6800,41.2,300,100,300,1.00
794
+ Lebanon,Jounieh,Holy Spirit University,Software Engineering,Master,2,16000,54.5,450,150,500,15000
795
+ Bahrain,Sakhir,Arabian Gulf University,Data Science,PhD,4,9000,62.4,620,130,600,0.38
796
+ Uruguay,Rivera,UTEC,Information Systems,Bachelor,4,0,47.8,350,90,350,39.50
797
+ Bulgaria,Burgas,Burgas Free University,Computer Science,Master,2,2900,43.5,320,110,300,1.85
798
+ Ghana,Tamale,University for Development,Software Development,PhD,4,3800,36.8,200,120,250,12.00
799
+ Algeria,Annaba,Badji Mokhtar University,Computer Engineering,Master,2,1000,34.5,180,80,200,137.50
800
+ Panama,Chitré,Quality Leadership University,Data Analytics,Bachelor,3,6200,44.2,380,100,400,1.00
801
+ Ecuador,Ambato,Universidad Tecnica,Information Technology,PhD,4,6500,40.5,280,100,300,1.00
802
+ Lebanon,Sidon,Lebanese International,Computer Science,Bachelor,4,15000,51.8,420,150,500,15000
803
+ Bahrain,Muharraq,Applied Science University,Data Engineering,Master,2,7500,61.5,580,130,600,0.38
804
+ Uruguay,Paysandu,Universidad de Paysandu,Software Engineering,Master,2,0,46.5,330,90,350,39.50
805
+ Bulgaria,Ruse,University of Ruse,Artificial Intelligence,PhD,4,3300,42.8,300,110,300,1.85
806
+ Ghana,Ho,University of Health Sciences,Data Science,Master,2,3500,35.4,180,120,250,12.00
807
+ Algeria,Tlemcen,University of Tlemcen,Information Systems,Bachelor,3,900,33.2,160,80,200,137.50
808
+ Panama,La Chorrera,Universidad Metropolitana,Computer Science,Master,2,6000,43.5,350,100,400,1.00
809
+ Bangladesh,Dhaka,Bangladesh University of Engineering,Computer Science,Master,2,2500,42.5,250,100,200,109.50
810
+ Kuwait,Kuwait City,Kuwait University,Data Science,Master,2,3500,71.2,800,140,700,0.31
811
+ Ukraine,Kyiv,Igor Sikorsky Kyiv Polytechnic,Software Engineering,Bachelor,4,3800,45.8,400,120,300,36.80
812
+ Slovenia,Ljubljana,University of Ljubljana,Computer Engineering,PhD,4,4500,62.4,500,80,450,0.92
813
+ Serbia,Belgrade,University of Belgrade,Information Systems,Master,2,2800,48.5,350,90,320,108.50
814
+ Iran,Tehran,Sharif University of Technology,Data Analytics,Master,2,3000,51.2,400,150,280,42150
815
+ Uzbekistan,Tashkent,INHA University Tashkent,Computer Science,Bachelor,4,4200,44.5,300,160,250,12300
816
+ El Salvador,San Salvador,Universidad Don Bosco,Software Development,Master,2,5500,46.8,400,110,300,1.00
817
+ Bangladesh,Chittagong,CUET,Artificial Intelligence,PhD,4,2200,39.8,200,100,200,109.50
818
+ Kuwait,Hawalli,American University Kuwait,Data Engineering,Master,2,15000,68.5,750,140,700,0.31
819
+ Ukraine,Lviv,Lviv Polytechnic,Computer Science,Master,2,3500,43.2,350,120,300,36.80
820
+ Slovenia,Maribor,University of Maribor,Data Science,Master,2,4200,58.5,450,80,450,0.92
821
+ Serbia,Novi Sad,University of Novi Sad,Software Engineering,PhD,4,2600,45.8,320,90,320,108.50
822
+ Iran,Isfahan,Isfahan University of Technology,Information Systems,Bachelor,3,2800,48.5,350,150,280,42150
823
+ Uzbekistan,Samarkand,Samarkand State University,Data Analytics,Master,2,3800,41.2,250,160,250,12300
824
+ El Salvador,Santa Ana,Universidad Catolica,Computer Engineering,Bachelor,4,5000,44.5,350,110,300,1.00
825
+ Bangladesh,Khulna,Khulna University,Software Development,Master,2,2100,38.5,180,100,200,109.50
826
+ Kuwait,Al Jahra,Gulf University for Science,Artificial Intelligence,PhD,4,14000,66.8,700,140,700,0.31
827
+ Ukraine,Kharkiv,Kharkiv Polytechnic,Data Science,Master,2,3400,42.5,330,120,300,36.80
828
+ Slovenia,Koper,University of Primorska,Information Technology,Bachelor,3,4000,57.2,420,80,450,0.92
829
+ Serbia,Nis,University of Nis,Computer Engineering,Master,2,2500,44.2,300,90,320,108.50
830
+ Iran,Mashhad,Ferdowsi University,Data Analytics,PhD,4,2900,47.8,320,150,280,42150
831
+ Uzbekistan,Bukhara,Bukhara State University,Computer Science,Bachelor,4,3500,39.8,220,160,250,12300
832
+ El Salvador,San Miguel,Universidad de Oriente,Information Systems,Master,2,4800,43.2,320,110,300,1.00
833
+ Bangladesh,Rajshahi,RUET,Software Engineering,Master,2,2000,37.2,170,100,200,109.50
834
+ Kuwait,Salmiya,Australian College Kuwait,Data Science,Bachelor,3,13500,65.4,680,140,700,0.31
835
+ Ukraine,Odesa,Odesa Polytechnic,Artificial Intelligence,PhD,4,3600,41.8,320,120,300,36.80
836
+ Slovenia,Nova Gorica,University of Nova Gorica,Computer Science,Master,2,4100,56.5,400,80,450,0.92
837
+ Serbia,Kragujevac,University of Kragujevac,Data Engineering,Bachelor,4,2400,43.5,280,90,320,108.50
838
+ Iran,Shiraz,Shiraz University,Software Development,Master,2,2700,46.8,300,150,280,42150
839
+ Uzbekistan,Namangan,Namangan Institute,Information Technology,Master,2,3400,38.5,200,160,250,12300
840
+ El Salvador,Sonsonate,Universidad de Sonsonate,Data Science,Bachelor,3,4500,42.8,300,110,300,1.00
841
+ Bangladesh,Sylhet,SUST,Computer Engineering,PhD,4,2300,36.8,160,100,200,109.50
842
+ Kuwait,Al Ahmadi,ACK,Software Engineering,Master,2,13000,64.5,650,140,700,0.31
843
+ Ukraine,Dnipro,Dnipro Polytechnic,Data Analytics,Master,2,3300,40.5,300,120,300,36.80
844
+ Slovenia,Celje,Faculty of Logistics,Information Systems,Bachelor,3,3900,55.4,380,80,450,0.92
845
+ Serbia,Subotica,University of Subotica,Computer Science,Master,2,2300,42.8,270,90,320,108.50
846
+ Iran,Tabriz,University of Tabriz,Artificial Intelligence,PhD,4,2600,45.5,280,150,280,42150
847
+ Uzbekistan,Andijan,Andijan State University,Software Development,Master,2,3200,37.8,180,160,250,12300
848
+ El Salvador,Santa Tecla,ITCA-FEPADE,Computer Engineering,Bachelor,4,4200,42.1,280,110,300,1.00
849
+ Malaysia,Kuala Lumpur,University of Malaya,Computer Science,Master,2,8500,55.4,500,120,400,4.65
850
+ Saudi Arabia,Riyadh,King Saud University,Data Science,PhD,4,5000,72.5,800,200,800,3.75
851
+ USA,Boston,Harvard University,Artificial Intelligence,Master,2,58000,82.1,2200,160,1500,1.00
852
+ UK,London,Imperial College,Computer Engineering,Master,2,42000,75.3,1800,485,800,0.79
853
+ Spain,Madrid,Universidad Politecnica,Software Engineering,PhD,4,3500,71.4,1100,80,750,0.92
854
+ Italy,Milan,Politecnico di Milano,Data Analytics,Master,2,4000,73.2,1200,120,700,0.92
855
+ France,Paris,Sorbonne University,Computer Science,Master,2,4500,84.3,1800,99,850,0.92
856
+ Malaysia,Penang,USM,Information Systems,Bachelor,3,7500,52.1,450,120,400,4.65
857
+ Saudi Arabia,Jeddah,King Abdulaziz University,Data Engineering,Master,2,4800,70.2,750,200,800,3.75
858
+ USA,Stanford,Stanford University,Computer Science,PhD,5,52000,84.3,2300,160,1500,1.00
859
+ UK,Cambridge,University of Cambridge,Artificial Intelligence,PhD,4,45000,71.5,1600,485,800,0.79
860
+ Spain,Barcelona,Universitat de Barcelona,Data Science,Master,2,3800,73.6,1000,80,750,0.92
861
+ Italy,Rome,Sapienza University,Software Engineering,Bachelor,3,3500,71.2,1100,120,700,0.92
862
+ France,Lyon,École Normale Supérieure,Computer Engineering,Master,2,4200,75.6,1200,99,850,0.92
863
+ Malaysia,Johor Bahru,UTM,Data Analytics,PhD,4,8000,51.8,400,120,400,4.65
864
+ Saudi Arabia,Dhahran,KFUPM,Computer Science,Master,2,4500,68.5,700,200,800,3.75
865
+ USA,Berkeley,UC Berkeley,Data Science,Master,2,54000,83.2,2000,160,1500,1.00
866
+ UK,Oxford,University of Oxford,Software Engineering,Master,2,40000,71.5,1400,485,800,0.79
867
+ Spain,Valencia,Universidad de Valencia,Information Systems,PhD,4,3200,68.5,800,80,750,0.92
868
+ Italy,Turin,Politecnico di Torino,Artificial Intelligence,Master,2,3800,69.8,900,120,700,0.92
869
+ France,Toulouse,INSA Toulouse,Data Engineering,PhD,4,4300,72.1,1000,99,850,0.92
870
+ Malaysia,Kuching,UNIMAS,Computer Science,Master,2,7000,49.5,380,120,400,4.65
871
+ Saudi Arabia,Medina,Islamic University,Software Development,Bachelor,4,4200,65.4,650,200,800,3.75
872
+ USA,MIT,Massachusetts,Robotics,PhD,5,56000,82.1,2100,160,1500,1.00
873
+ UK,Edinburgh,University of Edinburgh,Data Science,Master,2,38000,67.8,1100,485,800,0.79
874
+ Spain,Seville,Universidad de Sevilla,Computer Engineering,Master,2,3000,65.4,750,80,750,0.92
875
+ Italy,Bologna,University of Bologna,Information Systems,PhD,4,3600,70.5,950,120,700,0.92
876
+ France,Marseille,Aix-Marseille University,Artificial Intelligence,Master,2,4100,73.5,1100,99,850,0.92
877
+ Malaysia,Cyberjaya,Multimedia University,Data Analytics,Bachelor,3,7800,53.2,450,120,400,4.65
878
+ Saudi Arabia,Dammam,Imam Abdulrahman University,Computer Science,Master,2,4600,67.8,680,200,800,3.75
879
+ USA,New York,Columbia University,Data Science,Master,2,62000,100,2500,160,1500,1.00
880
+ UK,Manchester,University of Manchester,Software Engineering,PhD,4,35000,65.4,900,485,800,0.79
881
+ Spain,Granada,Universidad de Granada,Computer Science,Bachelor,3,2800,64.5,700,80,750,0.92
882
+ Italy,Florence,University of Florence,Data Engineering,Master,2,3500,71.2,1000,120,700,0.92
883
+ France,Bordeaux,University of Bordeaux,Information Systems,PhD,4,4300,72.1,1000,99,850,0.92
884
+ Malaysia,Bangi,UKM,Artificial Intelligence,Master,2,7200,51.5,420,120,400,4.65
885
+ Saudi Arabia,Taif,Taif University,Software Development,Master,2,4400,64.5,600,200,800,3.75
886
+ USA,Los Angeles,UCLA,Computer Engineering,PhD,5,52000,79.8,2200,160,1500,1.00
887
+ UK,Bristol,University of Bristol,Data Analytics,Master,2,36000,68.9,1200,485,800,0.79
888
+ Spain,Bilbao,University of the Basque Country,Information Technology,Master,2,3400,67.8,850,80,750,0.92
889
+ Italy,Naples,University of Naples,Computer Science,Bachelor,3,3200,67.8,800,120,700,0.92
890
+ France,Nice,University of Nice,Data Science,Master,2,4100,76.5,1300,99,850,0.92
891
+ Malaysia,Melaka,UTeM,Software Engineering,PhD,4,7500,50.2,400,120,400,4.65
892
+ Saudi Arabia,Tabuk,University of Tabuk,Computer Engineering,Bachelor,4,4100,63.2,580,200,800,3.75
893
+ USA,Chicago,University of Chicago,Artificial Intelligence,Master,2,58000,84.1,1900,160,1500,1.00
894
+ UK,Glasgow,University of Glasgow,Data Engineering,PhD,4,34000,64.5,950,485,800,0.79
895
+ Spain,Salamanca,University of Salamanca,Information Systems,Master,2,3100,62.1,600,80,750,0.92
896
+ Italy,Pisa,University of Pisa,Software Development,Master,2,3300,68.9,850,120,700,0.92
897
+ France,Lille,University of Lille,Computer Science,Bachelor,3,4200,69.8,950,99,850,0.92
898
+ Malaysia,Shah Alam,UiTM,Data Analytics,Master,2,7100,51.8,430,120,400,4.65
899
+ Saudi Arabia,Makkah,Umm Al-Qura University,Information Technology,PhD,4,4300,65.8,650,200,800,3.75
900
+ USA,San Francisco,Stanford University,Data Science,Master,2,55000,95.2,2400,160,1500,1.00
901
+ UK,Leeds,University of Leeds,Computer Engineering,Master,2,35000,63.2,900,485,800,0.79
902
+ Spain,Zaragoza,University of Zaragoza,Artificial Intelligence,PhD,4,2900,63.2,650,80,750,0.92
903
+ Italy,Padua,University of Padua,Software Engineering,Master,2,3400,69.5,900,120,700,0.92
904
+ France,Strasbourg,University of Strasbourg,Data Analytics,Master,2,4000,70.2,1000,99,850,0.92
905
+ Malaysia,Nilai,USIM,Computer Science,Bachelor,3,6800,50.5,400,120,400,4.65
906
+ Saudi Arabia,Al-Ahsa,King Faisal University,Information Systems,Master,2,4200,64.2,600,200,800,3.75
907
+ USA,Seattle,University of Washington,Software Development,PhD,5,50000,77.8,2000,160,1500,1.00
908
+ UK,Nottingham,University of Nottingham,Data Engineering,Master,2,34000,61.2,800,485,800,0.79
next/QS World University Rankings 2025.csv ADDED
The diff for this file is too large to render. See raw diff
 
next/README.md ADDED
@@ -0,0 +1,36 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ This is a [Next.js](https://nextjs.org) project bootstrapped with [`create-next-app`](https://nextjs.org/docs/app/api-reference/cli/create-next-app).
2
+
3
+ ## Getting Started
4
+
5
+ First, run the development server:
6
+
7
+ ```bash
8
+ npm run dev
9
+ # or
10
+ yarn dev
11
+ # or
12
+ pnpm dev
13
+ # or
14
+ bun dev
15
+ ```
16
+
17
+ Open [http://localhost:3000](http://localhost:3000) with your browser to see the result.
18
+
19
+ You can start editing the page by modifying `app/page.tsx`. The page auto-updates as you edit the file.
20
+
21
+ This project uses [`next/font`](https://nextjs.org/docs/app/building-your-application/optimizing/fonts) to automatically optimize and load [Geist](https://vercel.com/font), a new font family for Vercel.
22
+
23
+ ## Learn More
24
+
25
+ To learn more about Next.js, take a look at the following resources:
26
+
27
+ - [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API.
28
+ - [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial.
29
+
30
+ You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js) - your feedback and contributions are welcome!
31
+
32
+ ## Deploy on Vercel
33
+
34
+ The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js.
35
+
36
+ Check out our [Next.js deployment documentation](https://nextjs.org/docs/app/building-your-application/deploying) for more details.
next/components.json ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "$schema": "https://ui.shadcn.com/schema.json",
3
+ "style": "new-york",
4
+ "rsc": true,
5
+ "tsx": true,
6
+ "tailwind": {
7
+ "config": "",
8
+ "css": "src/app/globals.css",
9
+ "baseColor": "slate",
10
+ "cssVariables": true,
11
+ "prefix": ""
12
+ },
13
+ "iconLibrary": "lucide",
14
+ "aliases": {
15
+ "components": "@/components",
16
+ "utils": "@/lib/utils",
17
+ "ui": "@/components/ui",
18
+ "lib": "@/lib",
19
+ "hooks": "@/hooks"
20
+ },
21
+ "registries": {}
22
+ }
next/eslint.config.mjs ADDED
@@ -0,0 +1,18 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import { defineConfig, globalIgnores } from "eslint/config";
2
+ import nextVitals from "eslint-config-next/core-web-vitals";
3
+ import nextTs from "eslint-config-next/typescript";
4
+
5
+ const eslintConfig = defineConfig([
6
+ ...nextVitals,
7
+ ...nextTs,
8
+ // Override default ignores of eslint-config-next.
9
+ globalIgnores([
10
+ // Default ignores of eslint-config-next:
11
+ ".next/**",
12
+ "out/**",
13
+ "build/**",
14
+ "next-env.d.ts",
15
+ ]),
16
+ ]);
17
+
18
+ export default eslintConfig;
next/fetch_real_fees.py ADDED
@@ -0,0 +1,153 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import time
2
+ import json
3
+ import re
4
+ from groq import Groq
5
+ from supabase import create_client, Client
6
+ from ddgs import DDGS
7
+
8
+ # --- CONFIGURATION ---
9
+ SUPABASE_URL = "https://uwxzvealdwdlbedhpway.supabase.co"
10
+
11
+ # 👇 PASTE YOUR SUPABASE KEY HERE
12
+ SUPABASE_KEY = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6InV3eHp2ZWFsZHdkbGJlZGhwd2F5Iiwicm9sZSI6InNlcnZpY2Vfcm9sZSIsImlhdCI6MTc2NDI0ODM5MCwiZXhwIjoyMDc5ODI0MzkwfQ.TsE9cx1eMHTbQcHhynB4YUFP1UDj9htgrbuUQQk4sR4"
13
+
14
+ # 👇 PASTE YOUR GROQ API KEY HERE
15
+ GROQ_API_KEY = "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"
16
+
17
+ # Initialize Clients
18
+ supabase: Client = create_client(SUPABASE_URL, SUPABASE_KEY)
19
+ groq_client = Groq(api_key=GROQ_API_KEY)
20
+
21
+ def search_university_fee(uni_name, country):
22
+ """
23
+ Searches DuckDuckGo for the real fee structure.
24
+ """
25
+ clean_name = re.sub(r'\(.*?\)', '', uni_name).strip()
26
+ query = f"{clean_name} {country} tuition fees 2025 undergraduate local student"
27
+ print(f" 🔎 Searching: '{query}'...")
28
+
29
+ try:
30
+ with DDGS() as ddgs:
31
+ # Pass query directly
32
+ results = list(ddgs.text(query, max_results=3))
33
+
34
+ if results:
35
+ combined_text = " ".join([r['body'] for r in results])
36
+ return combined_text
37
+ except Exception as e:
38
+ print(f" ⚠️ Search Warning: {e}")
39
+ time.sleep(5)
40
+
41
+ return None
42
+
43
+ def extract_fee_from_text(search_text, uni_name, country):
44
+ """
45
+ Uses AI to analyze the search text and calculate the ANNUAL fee in USD.
46
+ """
47
+ prompt = f"""
48
+ Analyze this search result for '{uni_name}' in '{country}'.
49
+
50
+ SEARCH SNIPPET:
51
+ "{search_text}"
52
+
53
+ TASK:
54
+ 1. Find the Tuition Fee for a **LOCAL** undergraduate student.
55
+ 2. **CRITICAL MATH:** - If the text says "Per Semester", **MULTIPLY BY 2** to get the Annual fee.
56
+ - If the text says "Per Annum" or "Yearly", use it as is.
57
+ - If the text says "Total Program Fee" (for 4 years), divide by 4.
58
+ 3. Convert the final ANNUAL number to USD (integer only).
59
+ 4. If it says "Free" (e.g. Germany), return 0.
60
+ 5. If NO fee info is found, return null.
61
+
62
+ JSON FORMAT:
63
+ {{ "fee": 1500 }}
64
+ """
65
+
66
+ try:
67
+ completion = groq_client.chat.completions.create(
68
+ model="llama-3.1-8b-instant",
69
+ messages=[
70
+ {"role": "system", "content": "You are a data extractor. Output only JSON."},
71
+ {"role": "user", "content": prompt}
72
+ ],
73
+ temperature=0,
74
+ response_format={"type": "json_object"}
75
+ )
76
+ data = json.loads(completion.choices[0].message.content)
77
+ return data.get("fee")
78
+ except:
79
+ return None
80
+
81
+ def main():
82
+ print("🌍 Starting Global Fee Extraction (Safe Mode)...")
83
+
84
+ # 👇 CHANGE THIS NUMBER TO RESUME IF STOPPED (e.g., last_processed_id = 450)
85
+ last_processed_id = 1449
86
+
87
+ while True:
88
+ try:
89
+ # Fetch batch of 50 universities
90
+ response = supabase.table('universities') \
91
+ .select('id, university_name, country') \
92
+ .gt('id', last_processed_id) \
93
+ .order('id', desc=False) \
94
+ .limit(50) \
95
+ .execute()
96
+
97
+ universities = response.data
98
+ except Exception as e:
99
+ print(f"❌ Database Error: {e}")
100
+ time.sleep(10)
101
+ continue
102
+
103
+ if not universities:
104
+ print("✅✅✅ ALL DONE! Entire database processed.")
105
+ break
106
+
107
+ print(f"\n🔄 Loading batch of {len(universities)} universities (Starting ID: {universities[0]['id']})...")
108
+
109
+ for uni in universities:
110
+ name = uni['university_name']
111
+ country = uni['country']
112
+ uni_id = uni['id']
113
+
114
+ last_processed_id = uni_id
115
+
116
+ # SKIP HEADER ROWS
117
+ if "university" in name.lower() and "name" in name.lower():
118
+ print(f"Skipping Header Row (ID {uni_id})")
119
+ continue
120
+ if name.lower() == "institution":
121
+ print(f"Skipping Header Row (ID {uni_id})")
122
+ continue
123
+
124
+ print(f"Processing ID {uni_id}: {name} ({country})...")
125
+
126
+ search_text = search_university_fee(name, country)
127
+
128
+ if search_text:
129
+ real_fee = extract_fee_from_text(search_text, name, country)
130
+
131
+ if real_fee is not None:
132
+ # 👇 SMART CHECK: Only allow $0 for free-education countries
133
+ # If AI says $0 for Pakistan or USA, we ignore it.
134
+ allowed_free_countries = ["Germany", "Norway", "Finland", "Iceland", "Sweden", "Brazil"]
135
+
136
+ if real_fee == 0 and country not in allowed_free_countries:
137
+ print(f" ⚠️ Ignoring $0 fee for {country} (likely AI error). Skipping update.")
138
+ else:
139
+ print(f" 💰 Found Annual Fee: ${real_fee} USD")
140
+ try:
141
+ supabase.table('universities').update({"avg_tuition_usd": real_fee}).eq('id', uni_id).execute()
142
+ except:
143
+ print(" ❌ Save failed")
144
+ else:
145
+ print(" ⚠️ Text found, but AI couldn't find a clear fee.")
146
+ else:
147
+ print(" ⚠️ Search returned nothing.")
148
+
149
+ # Sleep 3 seconds to avoid blocking
150
+ time.sleep(3)
151
+
152
+ if __name__ == "__main__":
153
+ main()
next/fill_database.py ADDED
@@ -0,0 +1,104 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+ import time
3
+ import json
4
+ from groq import Groq
5
+ from supabase import create_client, Client
6
+
7
+ # --- CONFIGURATION ---
8
+ SUPABASE_URL = "https://uwxzvealdwdlbedhpway.supabase.co"
9
+
10
+ SUPABASE_KEY = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6InV3eHp2ZWFsZHdkbGJlZGhwd2F5Iiwicm9sZSI6InNlcnZpY2Vfcm9sZSIsImlhdCI6MTc2NDI0ODM5MCwiZXhwIjoyMDc5ODI0MzkwfQ.TsE9cx1eMHTbQcHhynB4YUFP1UDj9htgrbuUQQk4sR4"
11
+
12
+ GROQ_API_KEY = "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"
13
+
14
+ # Initialize Clients
15
+ supabase: Client = create_client(SUPABASE_URL, SUPABASE_KEY)
16
+ groq_client = Groq(api_key=GROQ_API_KEY)
17
+
18
+ def generate_university_data(uni_name, country):
19
+ prompt = f"""
20
+ I have a university named '{uni_name}' located in '{country}'.
21
+
22
+ 1. Write a professional 2-sentence description for it.
23
+ (Focus on its reputation, history, or academic strengths).
24
+ 2. List 5 to 8 specific degree programs it likely offers.
25
+
26
+ Return ONLY raw JSON with no extra text or markdown formatting:
27
+ {{
28
+ "description": "The description string here.",
29
+ "programs": ["Program 1", "Program 2", "Program 3"]
30
+ }}
31
+ """
32
+
33
+ try:
34
+ completion = groq_client.chat.completions.create(
35
+ model="llama-3.1-8b-instant",
36
+ messages=[
37
+ {"role": "system", "content": "You are a helpful database assistant that outputs only JSON."},
38
+ {"role": "user", "content": prompt}
39
+ ],
40
+ temperature=0.5,
41
+ response_format={"type": "json_object"} # Ensures valid JSON
42
+ )
43
+
44
+ return json.loads(completion.choices[0].message.content)
45
+
46
+ except Exception as e:
47
+ print(f"⚠️ AI Generation Error for {uni_name}: {e}")
48
+ return None
49
+
50
+ def main():
51
+ print("🚀 Starting AI Database Filler (Groq Powered)...")
52
+
53
+ # Fetch universities with no description
54
+ try:
55
+ # Fetch 50 at a time
56
+ response = supabase.table('universities').select('id, university_name, country').is_('description', 'null').limit(50).execute()
57
+ universities = response.data
58
+ except Exception as e:
59
+ print(f"❌ Failed to fetch initial list: {e}")
60
+ return
61
+
62
+ if not universities:
63
+ print("✅ All universities are already filled!")
64
+ return
65
+
66
+ print(f"Found {len(universities)} universities to update in this batch...")
67
+
68
+ count = 0
69
+ for uni in universities:
70
+ uni_id = uni['id']
71
+ name = uni['university_name']
72
+ country = uni['country']
73
+
74
+ print(f"🤖 Processing: {name} ({country})...")
75
+
76
+ # 1. Generate Data with Groq
77
+ ai_data = generate_university_data(name, country)
78
+
79
+ if ai_data:
80
+ # 2. Update Supabase
81
+ attempts = 0
82
+ while attempts < 3:
83
+ try:
84
+ data_to_update = {
85
+ "description": ai_data['description'],
86
+ "offered_programs": ai_data['programs']
87
+ }
88
+ supabase.table('universities').update(data_to_update).eq('id', uni_id).execute()
89
+ print(f" ✅ Updated!")
90
+ count += 1
91
+ break
92
+ except Exception as e:
93
+ attempts += 1
94
+ print(f" ⚠️ Connection dropped. Retrying ({attempts}/3)...")
95
+ time.sleep(5)
96
+
97
+ # Groq is fast, but let's keep a tiny sleep to be safe
98
+ time.sleep(1)
99
+
100
+ print(f"\n🎉 Batch finished! Updated {count} universities.")
101
+ print("Run the script again to process the next batch.")
102
+
103
+ if __name__ == "__main__":
104
+ main()
next/fill_tuition.py ADDED
@@ -0,0 +1,117 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+ import time
3
+ import json
4
+ from groq import Groq
5
+ from supabase import create_client, Client
6
+
7
+ # --- CONFIGURATION ---
8
+ SUPABASE_URL = "https://uwxzvealdwdlbedhpway.supabase.co"
9
+
10
+ SUPABASE_KEY = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6InV3eHp2ZWFsZHdkbGJlZGhwd2F5Iiwicm9sZSI6InNlcnZpY2Vfcm9sZSIsImlhdCI6MTc2NDI0ODM5MCwiZXhwIjoyMDc5ODI0MzkwfQ.TsE9cx1eMHTbQcHhynB4YUFP1UDj9htgrbuUQQk4sR4"
11
+
12
+ GROQ_API_KEY = "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"
13
+
14
+ # Initialize Clients
15
+ supabase: Client = create_client(SUPABASE_URL, SUPABASE_KEY)
16
+ groq_client = Groq(api_key=GROQ_API_KEY)
17
+
18
+ def get_monthly_living_cost(uni_name, country):
19
+ prompt = f"""
20
+ Estimate the average MONTHLY living cost (Rent + Food + Transport + Utilities)
21
+ for a single university student at '{uni_name}' in '{country}'.
22
+
23
+ RULES:
24
+ 1. Output MUST be in USD.
25
+ 2. IGNORE global averages. Use LOCAL purchasing power context.
26
+ 3. REALISTIC EXAMPLES:
27
+ - Pakistan/India/Bangladesh: $200 - $450 USD.
28
+ - Thailand/Vietnam: $350 - $600 USD.
29
+ - Germany/France: $800 - $1400 USD.
30
+ - USA/UK/Australia: $1200 - $2500 USD.
31
+ 4. Return ONLY a single integer.
32
+
33
+ Return ONLY raw JSON:
34
+ {{
35
+ "cost": 350
36
+ }}
37
+ """
38
+
39
+ max_retries = 3
40
+ for attempt in range(max_retries):
41
+ try:
42
+ completion = groq_client.chat.completions.create(
43
+ model="llama-3.1-8b-instant",
44
+ messages=[
45
+ {"role": "system", "content": "You are an expert on local economic data. Output only JSON."},
46
+ {"role": "user", "content": prompt}
47
+ ],
48
+ temperature=0.1,
49
+ response_format={"type": "json_object"},
50
+ timeout=10
51
+ )
52
+
53
+ data = json.loads(completion.choices[0].message.content)
54
+ return data.get("cost")
55
+
56
+ except Exception as e:
57
+ print(f" ⚠️ AI Glitch (Attempt {attempt+1}/{max_retries}): {e}")
58
+ time.sleep(2)
59
+
60
+ return None
61
+
62
+ def main():
63
+ print("💰 Starting Living Cost Filler (Infinite Loop)...")
64
+
65
+ while True:
66
+ # 1. Fetch batch of 50 universities where 'avg_living_usd' is NULL
67
+ try:
68
+ response = supabase.table('universities') \
69
+ .select('id, university_name, country') \
70
+ .is_('avg_living_usd', 'null') \
71
+ .limit(50) \
72
+ .execute()
73
+ universities = response.data
74
+ except Exception as e:
75
+ print(f"❌ Database Error: {e}")
76
+ time.sleep(10)
77
+ continue
78
+
79
+ # 2. Stop if everything is done
80
+ if not universities:
81
+ print("\n✅✅✅ ALL DONE! Every university has living costs updated!")
82
+ break
83
+
84
+ print(f"\n🔄 Loading batch of {len(universities)} universities...")
85
+
86
+ # 3. Process Batch
87
+ count = 0
88
+ for uni in universities:
89
+ uni_id = uni['id']
90
+ name = uni['university_name']
91
+ country = uni['country']
92
+
93
+ print(f"🤖 Processing: {name} ({country})...")
94
+
95
+ cost = get_monthly_living_cost(name, country)
96
+
97
+ if cost:
98
+ attempts = 0
99
+ while attempts < 3:
100
+ try:
101
+ # 👇 UPDATING 'avg_living_usd' COLUMN
102
+ supabase.table('universities').update({"avg_living_usd": cost}).eq('id', uni_id).execute()
103
+ print(f" ✅ Updated: ${cost}/month")
104
+ count += 1
105
+ break
106
+ except Exception as e:
107
+ attempts += 1
108
+ print(f" ⚠️ Save failed. Retrying ({attempts}/3)...")
109
+ time.sleep(5)
110
+
111
+ time.sleep(0.5)
112
+
113
+ print(f"✨ Batch complete! Updated {count} universities. Grabbing next batch...")
114
+ time.sleep(1)
115
+
116
+ if __name__ == "__main__":
117
+ main()
next/global.d.ts ADDED
@@ -0,0 +1 @@
 
 
1
+ declare module 'csv-parser';
next/merge_data.py ADDED
@@ -0,0 +1,199 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import pandas as pd
2
+ import requests
3
+ from fuzzywuzzy import process, fuzz
4
+ import io
5
+
6
+ # ==========================================
7
+ # CONFIGURATION
8
+ # ==========================================
9
+ QS_FILE = "QS World University Rankings 2025.csv"
10
+ COST_FILE = "International_Education_Costs.csv"
11
+ OUTPUT_FILE = "Edupath_Final_Database.csv"
12
+
13
+ # Stronger headers to try and bypass the 403 error
14
+ HEADERS = {
15
+ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36",
16
+ "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8",
17
+ "Accept-Language": "en-US,en;q=0.5"
18
+ }
19
+
20
+ print("🚀 Starting the Edupath AI Data Merge (Final Fix)...")
21
+
22
+ # ==========================================
23
+ # STEP 1: SCRAPE CANADIAN FEES (With Backup)
24
+ # ==========================================
25
+ print("\n[1/4] Attempting to scrape Universities Canada...")
26
+ df_can = pd.DataFrame(columns=['university_name', 'canada_grad_fee_cad'])
27
+
28
+ try:
29
+ url = "https://univcan.ca/about-universities-canada/facts-and-stats/tuition-fees-by-university/"
30
+ response = requests.get(url, headers=HEADERS, timeout=10)
31
+
32
+ if response.status_code == 200:
33
+ tables = pd.read_html(io.StringIO(response.text), header=0)
34
+ temp_df = tables[0]
35
+
36
+ # Clean columns
37
+ if 'Graduate Foreign' in temp_df.columns:
38
+ df_can = temp_df[['University', 'Graduate Foreign']].copy()
39
+ df_can.columns = ['university_name', 'canada_grad_fee_cad']
40
+
41
+ # Clean money values
42
+ def clean_cad(val):
43
+ if pd.isna(val) or '-' in str(val): return None
44
+ try: return float(str(val).replace('$', '').replace(',', '').strip())
45
+ except: return None
46
+
47
+ df_can['canada_grad_fee_cad'] = df_can['canada_grad_fee_cad'].apply(clean_cad)
48
+ print(f" ✅ Success! Scraped fees for {len(df_can)} Canadian universities.")
49
+ else:
50
+ print(" ⚠️ Scraper warning: Table structure changed. Skipping Canada specific fees.")
51
+ else:
52
+ print(f" ⚠️ Website blocked automation (Status {response.status_code}). Skipping Canada specific fees.")
53
+
54
+ except Exception as e:
55
+ print(f" ⚠️ Scraper failed ({e}). Proceeding without new Canadian data.")
56
+
57
+ # ==========================================
58
+ # STEP 2: PREPARE THE COST DATASET (Robust)
59
+ # ==========================================
60
+ print(f"\n[2/4] Processing '{COST_FILE}'...")
61
+ try:
62
+ df_cost = pd.read_csv(COST_FILE)
63
+
64
+ # 1. Clean Column Names (Strip spaces)
65
+ df_cost.columns = df_cost.columns.str.strip()
66
+ print(f" ℹ️ Columns found: {df_cost.columns.tolist()}")
67
+
68
+ # 2. INTELLIGENT COLUMN FINDER
69
+ # This finds the correct column names even if they are spelled slightly differently
70
+ def find_col(keywords, columns):
71
+ for col in columns:
72
+ if any(k.lower() in col.lower() for k in keywords):
73
+ return col
74
+ return None
75
+
76
+ col_tuition = find_col(['Tuition', 'Tuition_US', 'Tuition_USD'], df_cost.columns)
77
+ col_rent = find_col(['Rent', 'Rent_USD'], df_cost.columns)
78
+ col_living = find_col(['Living', 'Living_Cos', 'Living_Cost'], df_cost.columns)
79
+
80
+ if not col_tuition:
81
+ print(" ❌ Error: Could not find a 'Tuition' column. Check your CSV.")
82
+ exit()
83
+
84
+ print(f" ℹ️ Mapping: Tuition='{col_tuition}', Rent='{col_rent}', Living='{col_living}'")
85
+
86
+ # 3. Process Data
87
+ # Convert to numbers (force non-numbers to become NaN)
88
+ df_cost[col_tuition] = pd.to_numeric(df_cost[col_tuition], errors='coerce')
89
+
90
+ if col_rent: df_cost[col_rent] = pd.to_numeric(df_cost[col_rent], errors='coerce')
91
+ else: df_cost['Rent_Fake'] = 0 # Placeholder if missing
92
+
93
+ if col_living: df_cost[col_living] = pd.to_numeric(df_cost[col_living], errors='coerce')
94
+ else: df_cost['Living_Fake'] = 0
95
+
96
+ # Group duplicates
97
+ agg_dict = {
98
+ col_tuition: 'mean',
99
+ 'City': 'first',
100
+ 'Country': 'first'
101
+ }
102
+ if col_rent: agg_dict[col_rent] = 'mean'
103
+ if col_living: agg_dict[col_living] = 'mean'
104
+
105
+ df_cost_grouped = df_cost.groupby('University').agg(agg_dict).reset_index()
106
+
107
+ # Rename columns for the merge step
108
+ rename_map = {col_tuition: 'Tuition_US'}
109
+ if col_rent: rename_map[col_rent] = 'Rent_USD'
110
+ if col_living: rename_map[col_living] = 'Living_Cos'
111
+
112
+ df_cost_grouped.rename(columns=rename_map, inplace=True)
113
+
114
+ # Ensure all expected columns exist even if original file was missing them
115
+ if 'Rent_USD' not in df_cost_grouped.columns: df_cost_grouped['Rent_USD'] = None
116
+ if 'Living_Cos' not in df_cost_grouped.columns: df_cost_grouped['Living_Cos'] = None
117
+
118
+ print(f" ✅ Loaded cost data for {len(df_cost_grouped)} universities.")
119
+
120
+ except Exception as e:
121
+ print(f" ❌ Critical Error processing cost file: {e}")
122
+ exit()
123
+
124
+ # ==========================================
125
+ # STEP 3: MERGE WITH QS
126
+ # ==========================================
127
+ print("\n[3/4] Merging with QS Rankings...")
128
+ try:
129
+ df_qs = pd.read_csv(QS_FILE, encoding='latin1')
130
+
131
+ # Find name column
132
+ qs_name_col = [c for c in df_qs.columns if 'institution' in c.lower() or 'university' in c.lower()][0]
133
+
134
+ # Init columns
135
+ df_qs['avg_tuition_usd'] = None
136
+ df_qs['avg_rent_usd'] = None
137
+ df_qs['avg_living_usd'] = None
138
+ df_qs['canada_fee_cad'] = None
139
+ df_qs['source'] = 'QS Ranked'
140
+
141
+ cost_names = df_cost_grouped['University'].tolist()
142
+ can_names = df_can['university_name'].tolist() if not df_can.empty else []
143
+
144
+ matches = 0
145
+
146
+ for index, row in df_qs.iterrows():
147
+ qs_name = str(row[qs_name_col])
148
+
149
+ # Match Cost
150
+ match, score = process.extractOne(qs_name, cost_names, scorer=fuzz.token_sort_ratio)
151
+ if score > 85:
152
+ data = df_cost_grouped[df_cost_grouped['University'] == match].iloc[0]
153
+ df_qs.at[index, 'avg_tuition_usd'] = data['Tuition_US']
154
+ df_qs.at[index, 'avg_rent_usd'] = data['Rent_USD']
155
+ df_qs.at[index, 'avg_living_usd'] = data['Living_Cos']
156
+ matches += 1
157
+
158
+ # Match Canada (only if we have data)
159
+ if not df_can.empty and 'Canada' in str(row):
160
+ m_can, s_can = process.extractOne(qs_name, can_names, scorer=fuzz.token_set_ratio)
161
+ if s_can > 90:
162
+ fee = df_can[df_can['university_name'] == m_can]['canada_grad_fee_cad'].values[0]
163
+ df_qs.at[index, 'canada_fee_cad'] = fee
164
+
165
+ print(f" ✅ Attached data to {matches} QS universities.")
166
+
167
+ # Add Unranked
168
+ print(" Adding extra universities...")
169
+ qs_names_existing = df_qs[qs_name_col].astype(str).tolist()
170
+ new_rows = []
171
+
172
+ for index, row in df_cost_grouped.iterrows():
173
+ cost_name = row['University']
174
+ match, score = process.extractOne(cost_name, qs_names_existing, scorer=fuzz.token_sort_ratio)
175
+
176
+ if score < 85:
177
+ new_rows.append({
178
+ qs_name_col: cost_name,
179
+ 'avg_tuition_usd': row['Tuition_US'],
180
+ 'avg_rent_usd': row['Rent_USD'],
181
+ 'avg_living_usd': row['Living_Cos'],
182
+ 'source': 'Cost Database (Unranked)'
183
+ })
184
+
185
+ if new_rows:
186
+ df_final = pd.concat([df_qs, pd.DataFrame(new_rows)], ignore_index=True)
187
+ print(f" ✅ Added {len(new_rows)} new universities.")
188
+ else:
189
+ df_final = df_qs
190
+
191
+ # STEP 4: SAVE
192
+ df_final.to_csv(OUTPUT_FILE, index=False)
193
+ print("\n" + "="*50)
194
+ print(f"🎉 SUCCESS! Database saved as: {OUTPUT_FILE}")
195
+ print(f"Total Universities: {len(df_final)}")
196
+ print("="*50)
197
+
198
+ except Exception as e:
199
+ print(f"❌ Error during merge: {e}")
next/next.config.ts ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
 
1
+ import type { NextConfig } from "next";
2
+
3
+ const nextConfig: NextConfig = {
4
+ /* config options here */
5
+ reactCompiler: true,
6
+ };
7
+
8
+ export default nextConfig;
next/package-lock.json ADDED
The diff for this file is too large to render. See raw diff
 
next/package.json ADDED
@@ -0,0 +1,52 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "name": "next",
3
+ "version": "0.1.0",
4
+ "private": true,
5
+ "scripts": {
6
+ "dev": "next dev",
7
+ "build": "next build",
8
+ "start": "next start",
9
+ "lint": "eslint"
10
+ },
11
+ "dependencies": {
12
+ "@hookform/resolvers": "^5.2.2",
13
+ "@prisma/client": "^5.22.0",
14
+ "@radix-ui/react-avatar": "^1.1.11",
15
+ "@radix-ui/react-dialog": "^1.1.15",
16
+ "@radix-ui/react-label": "^2.1.8",
17
+ "@radix-ui/react-separator": "^1.1.8",
18
+ "@radix-ui/react-slot": "^1.2.4",
19
+ "@radix-ui/react-tooltip": "^1.2.8",
20
+ "@supabase/ssr": "^0.8.0",
21
+ "@supabase/supabase-js": "^2.89.0",
22
+ "class-variance-authority": "^0.7.1",
23
+ "clsx": "^2.1.1",
24
+ "csv-parser": "^3.2.0",
25
+ "dotenv": "^17.2.3",
26
+ "groq-sdk": "^0.37.0",
27
+ "lucide-react": "^0.559.0",
28
+ "next": "^16.0.8",
29
+ "next-themes": "^0.4.6",
30
+ "react": "19.2.0",
31
+ "react-dom": "19.2.0",
32
+ "react-hook-form": "^7.68.0",
33
+ "sonner": "^2.0.7",
34
+ "tailwind-merge": "^3.4.0",
35
+ "zod": "^4.1.13"
36
+ },
37
+ "devDependencies": {
38
+ "@tailwindcss/postcss": "^4",
39
+ "@types/node": "^20",
40
+ "@types/react": "^19",
41
+ "@types/react-dom": "^19",
42
+ "babel-plugin-react-compiler": "1.0.0",
43
+ "baseline-browser-mapping": "^2.9.19",
44
+ "dotenv-cli": "^11.0.0",
45
+ "eslint": "^9",
46
+ "eslint-config-next": "16.0.5",
47
+ "prisma": "^5.22.0",
48
+ "tailwindcss": "^4",
49
+ "tw-animate-css": "^1.4.0",
50
+ "typescript": "^5"
51
+ }
52
+ }
next/postcss.config.mjs ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
 
1
+ const config = {
2
+ plugins: {
3
+ "@tailwindcss/postcss": {},
4
+ },
5
+ };
6
+
7
+ export default config;
next/prisma/schema.prisma ADDED
@@ -0,0 +1,120 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ generator client {
2
+ provider = "prisma-client-js"
3
+ }
4
+ datasource db {
5
+ provider = "postgresql"
6
+ url = env("DATABASE_URL")
7
+ directUrl = env("DIRECT_URL")
8
+ }
9
+
10
+ enum Role {
11
+ STUDENT
12
+ ADMIN
13
+ }
14
+
15
+ enum RoadmapStatus {
16
+ ACTIVE
17
+ COMPLETED
18
+ ARCHIVED
19
+ }
20
+
21
+ model User {
22
+ id String @id @default(uuid())
23
+ email String @unique
24
+ password String @unique
25
+ name String?
26
+ role Role @default(STUDENT)
27
+ createdAt DateTime @default(now())
28
+ updatedAt DateTime @updatedAt
29
+
30
+ quizResults QuizResult[]
31
+ roadmaps Roadmap[]
32
+ }
33
+
34
+ model QuizResult {
35
+ id String @id @default(uuid())
36
+ userId String
37
+ user User @relation(fields: [userId], references: [id], onDelete: Cascade)
38
+
39
+ confidenceScore Float
40
+
41
+ profileVector Json
42
+
43
+ createdAt DateTime @default(now())
44
+
45
+ // This relates to your other table "QuizAnswer"
46
+ answers QuizAnswer[]
47
+ }
48
+
49
+ model Question {
50
+ id String @id @default(uuid())
51
+ text String // The question text itself
52
+
53
+ // Stores options if it's multiple choice (e.g., ["A", "B", "C", "D"])
54
+ options Json?
55
+
56
+ // THE KEY: Stores the correct answer (e.g., "A" or "True")
57
+ // If it's a personality question with no "right" answer, leave this empty (null).
58
+ correctAnswer String?
59
+
60
+ category String // e.g., "Logical Reasoning" or "Creative Thinking"
61
+
62
+ // Relation: One question has many answers (from different students)
63
+ userAnswers QuizAnswer[]
64
+ }
65
+
66
+ model QuizAnswer {
67
+ id String @id @default(uuid())
68
+ quizResultId String
69
+ quizResult QuizResult @relation(fields: [quizResultId], references: [id], onDelete: Cascade)
70
+ questionId String
71
+ question Question @relation(fields: [questionId], references: [id])
72
+ isCorrect Boolean?
73
+ }
74
+
75
+ model CareerCluster {
76
+ id String @id @default(uuid())
77
+ name String @unique
78
+ description String
79
+ avgSalary String?
80
+
81
+ universities University[]
82
+ marketTrends MarketTrend[]
83
+ roadmaps Roadmap[]
84
+ }
85
+
86
+ model University {
87
+ id String @id @default(uuid())
88
+ name String
89
+ location String
90
+ website String?
91
+
92
+ admissionCriteria String @db.Text
93
+ feeStructure Int?
94
+
95
+ offeredCareers CareerCluster[]
96
+ }
97
+
98
+ model MarketTrend {
99
+ id String @id @default(uuid())
100
+ careerClusterId String
101
+ careerCluster CareerCluster @relation(fields: [careerClusterId], references: [id])
102
+
103
+ localDemand String
104
+ globalDemand String
105
+ growthPercentage Float?
106
+ lastUpdated DateTime @default(now())
107
+ }
108
+
109
+ model Roadmap {
110
+ id String @id @default(uuid())
111
+ userId String
112
+ user User @relation(fields: [userId], references: [id], onDelete: Cascade)
113
+ careerClusterId String
114
+ careerCluster CareerCluster @relation(fields: [careerClusterId], references: [id])
115
+ content Json
116
+ progress Int @default(0)
117
+ status RoadmapStatus @default(ACTIVE)
118
+ createdAt DateTime @default(now())
119
+ updatedAt DateTime @updatedAt
120
+ }
next/public/file.svg ADDED
next/public/globe.svg ADDED
next/public/next.svg ADDED
next/public/vercel.svg ADDED
next/public/window.svg ADDED
next/scripts/import_universities.ts ADDED
@@ -0,0 +1,71 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import * as dotenv from 'dotenv';
2
+ import * as path from 'path';
3
+ import * as fs from 'fs';
4
+ import csv from 'csv-parser';
5
+ import { PrismaClient } from '@prisma/client';
6
+
7
+ // 1. Force load the .env file
8
+ dotenv.config({ path: path.resolve(process.cwd(), '.env') });
9
+
10
+ const prisma = new PrismaClient();
11
+
12
+ async function main() {
13
+ const results: any[] = [];
14
+
15
+ console.log("🚀 Step 1: Importing Global Universities...");
16
+
17
+ // 2. Read the CSV file
18
+ await new Promise((resolve, reject) => {
19
+ fs.createReadStream(path.resolve(process.cwd(), 'university_data.csv'))
20
+ .pipe(csv())
21
+ .on('data', (data: any) => results.push(data))
22
+ .on('end', resolve)
23
+ .on('error', reject);
24
+ });
25
+
26
+ console.log(`📦 Found ${results.length} rows. Processing...`);
27
+
28
+ let successCount = 0;
29
+
30
+ // 3. Loop through rows and insert them safely
31
+ for (const row of results) {
32
+ // Try to find the name using common header names
33
+ const name = row.Name || row.University || row.institution || row.name;
34
+
35
+ // Try to find the location using common header names
36
+ // If missing, fallback to "Unknown Location" so it doesn't crash
37
+ const location = row.Location || row.Country || row.Region || row.location || "Unknown Location";
38
+
39
+ // Skip rows that have no name (usually empty lines at the end of file)
40
+ if (!name) {
41
+ continue;
42
+ }
43
+
44
+ try {
45
+ // Create the university
46
+ await prisma.university.create({
47
+ data: {
48
+ name: name.trim(),
49
+ location: location.trim(),
50
+ // Add default values for other fields if they exist in your schema
51
+ admissionCriteria: "General admission requirements apply.",
52
+ },
53
+ });
54
+ successCount++;
55
+ } catch (error) {
56
+ // If a duplicate or error occurs, just log it and keep going
57
+ console.log(`⚠️ Skipped "${name}": Already exists or invalid.`);
58
+ }
59
+ }
60
+
61
+ console.log(`✅ Done! Successfully imported ${successCount} universities.`);
62
+ }
63
+
64
+ main()
65
+ .catch((e) => {
66
+ console.error(e);
67
+ process.exit(1);
68
+ })
69
+ .finally(async () => {
70
+ await prisma.$disconnect();
71
+ });
next/scripts/upsert_us_fees.ts ADDED
@@ -0,0 +1,86 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import * as dotenv from 'dotenv';
2
+ import * as path from 'path';
3
+ import * as fs from 'fs';
4
+ import csv from 'csv-parser';
5
+ import { PrismaClient } from '@prisma/client';
6
+
7
+ dotenv.config({ path: path.resolve(process.cwd(), '.env') });
8
+
9
+ const prisma = new PrismaClient();
10
+
11
+ async function main() {
12
+ const rows: any[] = [];
13
+
14
+ console.log("📖 Reading US Fees CSV...");
15
+
16
+ await new Promise((resolve, reject) => {
17
+ fs.createReadStream(path.resolve(process.cwd(), 'us_fees.csv'))
18
+ .pipe(csv())
19
+ .on('data', (data: any) => rows.push(data))
20
+ .on('end', resolve)
21
+ .on('error', reject);
22
+ });
23
+
24
+ console.log(`🔍 Found ${rows.length} rows. Starting Smart Import (Update or Create)...`);
25
+
26
+ let updatedCount = 0;
27
+ let createdCount = 0;
28
+
29
+ for (const row of rows) {
30
+ const csvName = row.name;
31
+ const feeString = row.fee_usd;
32
+
33
+ if (!csvName || !feeString) continue;
34
+
35
+ // Clean the fee (remove '$' and ',')
36
+ const cleanFee = parseFloat(feeString.toString().replace(/[^0-9.]/g, ''));
37
+ if (isNaN(cleanFee)) continue;
38
+
39
+ const finalFee = Math.floor(cleanFee);
40
+
41
+ // 1. Try to find it
42
+ const existingUni = await prisma.university.findFirst({
43
+ where: {
44
+ name: { contains: csvName.trim(), mode: 'insensitive' },
45
+ },
46
+ });
47
+
48
+ if (existingUni) {
49
+ // OPTION A: UPDATE existing
50
+ await prisma.university.update({
51
+ where: { id: existingUni.id },
52
+ data: { feeStructure: finalFee },
53
+ });
54
+ updatedCount++;
55
+ } else {
56
+ // OPTION B: CREATE new
57
+ // We assume it's United States because of the filename
58
+ await prisma.university.create({
59
+ data: {
60
+ name: csvName.trim(),
61
+ location: "United States",
62
+ feeStructure: finalFee,
63
+ admissionCriteria: "Contact institution for details."
64
+ }
65
+ });
66
+ createdCount++;
67
+ }
68
+
69
+ const total = updatedCount + createdCount;
70
+ if (total % 10 === 0) console.log(` Processed ${total} universities...`);
71
+ }
72
+
73
+ console.log(`✅ DONE!`);
74
+ console.log(` - Updated: ${updatedCount}`);
75
+ console.log(` - Created: ${createdCount}`);
76
+ console.log(` - Total Fees Added: ${updatedCount + createdCount}`);
77
+ }
78
+
79
+ main()
80
+ .catch((e) => {
81
+ console.error(e);
82
+ process.exit(1);
83
+ })
84
+ .finally(async () => {
85
+ await prisma.$disconnect();
86
+ });
next/src/app/about-us/page.tsx ADDED
@@ -0,0 +1,186 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import { Navbar } from "@/components/navbar"
2
+ import { Footer } from "@/components/footer"
3
+ import { Card, CardContent } from "@/components/ui/card"
4
+ import { Target, Eye, Award, Users2 } from "lucide-react"
5
+
6
+ export default function AboutPage() {
7
+ return (
8
+ <div className="min-h-screen flex flex-col">
9
+ <Navbar />
10
+
11
+ <main className="flex-1">
12
+ {/* Hero Section */}
13
+ <section className="py-20 md:py-32 bg-linear-to-b from-secondary/50 to-background">
14
+ <div className="container mx-auto px-4 sm:px-6 lg:px-8">
15
+ <div className="max-w-3xl mx-auto text-center space-y-6">
16
+ <h1 className="text-4xl md:text-5xl font-bold text-balance">
17
+ {"About "}
18
+ <span className="text-primary">Edu Path AI</span>
19
+ </h1>
20
+ <p className="text-lg md:text-xl text-muted-foreground leading-relaxed">
21
+ We're on a mission to revolutionize career guidance through intelligent interest assessment and
22
+ personalized university recommendations.
23
+ </p>
24
+ </div>
25
+ </div>
26
+ </section>
27
+
28
+ {/* Story Section */}
29
+ <section className="py-20">
30
+ <div className="container mx-auto px-4 sm:px-6 lg:px-8">
31
+ <div className="max-w-4xl mx-auto space-y-8">
32
+ <div className="space-y-4">
33
+ <h2 className="text-3xl font-bold">Our Story</h2>
34
+ <p className="text-muted-foreground leading-relaxed">
35
+ Edu Path AI was born from a critical observation: too many students struggle to select their professional
36
+ careers due to a lack of proper research or guidance. We saw talented individuals drifting into fields solely
37
+ because of parental pressure or limited information, leading to dissatisfaction and wasted potential.
38
+ </p>
39
+ <p className="text-muted-foreground leading-relaxed">
40
+ In 2025, our team of Software Engineering students at Lahore Garrison University set out to change this.
41
+ We realized that existing platforms were fragmented—some offered university lists, others offered
42
+ career tests, but none combined them effectively. We wanted to build a centralized platform that
43
+ not only identifies a student's true interests but also maps out the exact path to achieve them.
44
+ </p>
45
+ <p className="text-muted-foreground leading-relaxed">
46
+ Today, Edu Path AI serves as a comprehensive recommendation engine. By leveraging Artificial Intelligence
47
+ and Psychometric Testing, we help students discover their passion, find the right university, and generate
48
+ a 4-year roadmap for success, contributing directly to Quality Education (SDG 4).
49
+ </p>
50
+ </div>
51
+ </div>
52
+ </div>
53
+ </section>
54
+
55
+ {/* Mission & Vision */}
56
+ <section className="py-20 bg-card">
57
+ <div className="container mx-auto px-4 sm:px-6 lg:px-8">
58
+ <div className="grid grid-cols-1 md:grid-cols-2 gap-8 max-w-5xl mx-auto">
59
+ <Card className="border-2">
60
+ <CardContent className="pt-6 space-y-4">
61
+ <div className="h-12 w-12 rounded-lg bg-primary/10 flex items-center justify-center">
62
+ <Target className="h-6 w-6 text-primary" />
63
+ </div>
64
+ <h3 className="text-2xl font-bold">Our Mission</h3>
65
+ <p className="text-muted-foreground leading-relaxed">
66
+ To eliminate the risk of students choosing fields under pressure by providing scientific,
67
+ AI-driven guidance. We aim to empower every student to make data-driven decisions about their
68
+ future, ensuring they pursue careers where they can truly make a difference.
69
+ </p>
70
+ </CardContent>
71
+ </Card>
72
+
73
+ <Card className="border-2">
74
+ <CardContent className="pt-6 space-y-4">
75
+ <div className="h-12 w-12 rounded-lg bg-primary/10 flex items-center justify-center">
76
+ <Eye className="h-6 w-6 text-primary" />
77
+ </div>
78
+ <h3 className="text-2xl font-bold">Our Vision</h3>
79
+ <p className="text-muted-foreground leading-relaxed">
80
+ A world where every student has access to personalized career counseling. We envision a future
81
+ where choosing a university is no longer a gamble, but a calculated step towards economic
82
+ development and industry innovation (SDG 9).
83
+ </p>
84
+ </CardContent>
85
+ </Card>
86
+ </div>
87
+ </div>
88
+ </section>
89
+
90
+ {/* Values Section */}
91
+ <section className="py-20">
92
+ <div className="container mx-auto px-4 sm:px-6 lg:px-8">
93
+ <div className="max-w-4xl mx-auto space-y-12">
94
+ <div className="text-center space-y-4">
95
+ <h2 className="text-3xl font-bold">Our Values</h2>
96
+ <p className="text-muted-foreground leading-relaxed">
97
+ The principles that guide everything we do at Edu Path AI.
98
+ </p>
99
+ </div>
100
+
101
+ <div className="grid grid-cols-1 md:grid-cols-3 gap-8">
102
+ <div className="space-y-3 text-center">
103
+ <div className="h-16 w-16 rounded-lg bg-primary/10 flex items-center justify-center mx-auto">
104
+ <Award className="h-8 w-8 text-primary" />
105
+ </div>
106
+ <h3 className="text-xl font-semibold">Accuracy</h3>
107
+ <p className="text-sm text-muted-foreground leading-relaxed">
108
+ We prioritize high-quality datasets and reliable AI models to ensure our recommendations
109
+ genuinely reflect a student's potential.
110
+ </p>
111
+ </div>
112
+
113
+ <div className="space-y-3 text-center">
114
+ <div className="h-16 w-16 rounded-lg bg-primary/10 flex items-center justify-center mx-auto">
115
+ <Users2 className="h-8 w-8 text-primary" />
116
+ </div>
117
+ <h3 className="text-xl font-semibold">Student-Centric</h3>
118
+ <p className="text-sm text-muted-foreground leading-relaxed">
119
+ Our primary focus is the student. We design intuitive interfaces and clear guidance
120
+ to help those with limited technical expertise navigate their future.
121
+ </p>
122
+ </div>
123
+
124
+ <div className="space-y-3 text-center">
125
+ <div className="h-16 w-16 rounded-lg bg-primary/10 flex items-center justify-center mx-auto">
126
+ <Target className="h-8 w-8 text-primary" />
127
+ </div>
128
+ <h3 className="text-xl font-semibold">Transparency</h3>
129
+ <p className="text-sm text-muted-foreground leading-relaxed">
130
+ We believe in providing all information—from fee structures to market trends—on a
131
+ single platform, removing the confusion of scattered data.
132
+ </p>
133
+ </div>
134
+ </div>
135
+ </div>
136
+ </div>
137
+ </section>
138
+
139
+ {/* Platform Overview */}
140
+ <section className="py-20 bg-linear-to-b from-background to-secondary/50">
141
+ <div className="container mx-auto px-4 sm:px-6 lg:px-8">
142
+ <div className="max-w-4xl mx-auto space-y-8">
143
+ <div className="text-center space-y-4">
144
+ <h2 className="text-3xl font-bold">The Platform</h2>
145
+ <p className="text-muted-foreground leading-relaxed">
146
+ A comprehensive solution designed for students and educators.
147
+ </p>
148
+ </div>
149
+
150
+ <div className="space-y-6">
151
+ <div className="space-y-2">
152
+ <h3 className="text-xl font-semibold">AI Interest Discovery</h3>
153
+ <p className="text-muted-foreground leading-relaxed">
154
+ Our core feature uses advanced psychometric testing and Machine Learning to create a unique
155
+ profile vector for every student. By assessing over 30 data points, we identify hidden
156
+ talents and match them with the most compatible career clusters and degree programs.
157
+ </p>
158
+ </div>
159
+
160
+ <div className="space-y-2">
161
+ <h3 className="text-xl font-semibold">Integrated University Data</h3>
162
+ <p className="text-muted-foreground leading-relaxed">
163
+ Say goodbye to browsing hundreds of university websites. Our database integrates admission criteria,
164
+ fee structures, and course outlines in one place. Students can compare universities side-by-side
165
+ and filter by location or cost to find their perfect match.
166
+ </p>
167
+ </div>
168
+
169
+ <div className="space-y-2">
170
+ <h3 className="text-xl font-semibold">4-Year Career Roadmap</h3>
171
+ <p className="text-muted-foreground leading-relaxed">
172
+ We don't just point you to a degree; we show you how to succeed in it. Our system generates
173
+ a year-by-year roadmap suggesting major subjects, necessary skills, certifications, and
174
+ internship windows, ensuring you stay ahead in the competitive job market.
175
+ </p>
176
+ </div>
177
+ </div>
178
+ </div>
179
+ </div>
180
+ </section>
181
+ </main>
182
+
183
+ <Footer />
184
+ </div>
185
+ )
186
+ }
next/src/app/api/auth/login/route.ts ADDED
@@ -0,0 +1,34 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import { createClient } from "@/utils/supabase/server"
2
+ import { NextResponse } from "next/server"
3
+ import { loginSchema } from "@/lib/validations/login"
4
+ import { createSupabaseAdminClient } from "@/utils/supabase"
5
+
6
+ export async function POST(request: Request) {
7
+ try {
8
+ const body = await request.json()
9
+ const result = loginSchema.safeParse(body)
10
+
11
+ if (!result.success) {
12
+ return NextResponse.json({ error: result.error.message }, { status: 400 })
13
+ }
14
+
15
+ const { email, password } = result.data
16
+ const supabase = createSupabaseAdminClient();
17
+
18
+
19
+ // 2. Sign in with Password
20
+ const { error } = await supabase.auth.signInWithPassword({
21
+ email,
22
+ password,
23
+ })
24
+
25
+ if (error) {
26
+ return NextResponse.json({ error: error.message }, { status: 401 })
27
+ }
28
+
29
+ return NextResponse.json({ success: true, message: "Login successful!" })
30
+
31
+ } catch (error) {
32
+ return NextResponse.json({ error: "Internal Server Error" }, { status: 500 })
33
+ }
34
+ }
next/src/app/api/auth/register/route.ts ADDED
@@ -0,0 +1,44 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import { NextResponse } from "next/server"
2
+ import { registerSchema } from "@/lib/validations/register"
3
+ import { createSupabaseAdminClient } from "@/utils/supabase"
4
+
5
+ export async function POST(request: Request) {
6
+ try {
7
+ const body = await request.json()
8
+ console.log(body)
9
+
10
+ // 1. Validate Input
11
+ const result = registerSchema.safeParse(body)
12
+ if (!result.success) {
13
+ return NextResponse.json({ error: result.error.message }, { status: 400 })
14
+ }
15
+
16
+ const { email, password, name, role } = result.data
17
+
18
+ const supabase = createSupabaseAdminClient();
19
+
20
+ const { data, error } = await supabase.auth.signUp({
21
+ email,
22
+ password,
23
+ options: {
24
+ data: {
25
+ role: role
26
+ }
27
+ }
28
+ })
29
+
30
+ if (error) {
31
+ console.log(error)
32
+ return NextResponse.json({ error: error.message }, { status: 400 })
33
+ }
34
+
35
+ return NextResponse.json({
36
+ success: true,
37
+ message: "Account created! Please check your email to confirm."
38
+ })
39
+
40
+ } catch (error) {
41
+ console.log(error)
42
+ return NextResponse.json({ error: "Internal Server Error" }, { status: 500 })
43
+ }
44
+ }
next/src/app/api/universities/route.ts ADDED
@@ -0,0 +1,45 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import { NextResponse } from 'next/server';
2
+ import { supabase } from '@/lib/supabase';
3
+
4
+ export async function GET(request: Request) {
5
+ try {
6
+ const { searchParams } = new URL(request.url);
7
+ const search = searchParams.get('search');
8
+ const location = searchParams.get('location');
9
+ const maxFee = searchParams.get('maxFee');
10
+
11
+ // 1. Start the query (Sort by ID to mix datasets, or name)
12
+ let query = supabase
13
+ .from('University')
14
+ .select('*')
15
+ // .order('createdAt', { ascending: false }) // OPTIONAL: Uncomment if you want newest first
16
+ .limit(50);
17
+
18
+ // 2. Add Filters
19
+ if (search) {
20
+ query = query.ilike('name', `%${search}%`);
21
+ }
22
+
23
+ if (location) {
24
+ query = query.ilike('location', `%${location}%`);
25
+ }
26
+
27
+ if (maxFee) {
28
+ // THE FIX:
29
+ // This says: "Fee is less than maxFee OR Fee is NULL (Unknown)"
30
+ // This ensures universities with no fee data (like your Top 1600) still show up.
31
+ query = query.or(`feeStructure.lte.${parseInt(maxFee)},feeStructure.is.null`);
32
+ }
33
+
34
+ // 3. Execute
35
+ const { data, error } = await query;
36
+
37
+ if (error) throw error;
38
+
39
+ return NextResponse.json(data);
40
+
41
+ } catch (error: any) {
42
+ console.error("❌ SUPABASE API ERROR:", error);
43
+ return NextResponse.json({ error: error.message }, { status: 500 });
44
+ }
45
+ }
next/src/app/blogs/page.tsx ADDED
@@ -0,0 +1,166 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import Link from "next/link"
2
+ import { Navbar } from "@/components/navbar"
3
+ import { Footer } from "@/components/footer"
4
+ import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card"
5
+ import { Badge } from "@/components/ui/badge"
6
+ import { Calendar, Clock, ArrowRight } from "lucide-react"
7
+
8
+ const blogPosts = [
9
+ {
10
+ id: 1,
11
+ title: "How AI Predicts Your Perfect Career Path",
12
+ excerpt:
13
+ "Discover the science behind our psychometric testing and how Machine Learning algorithms analyze your interests to find your ideal profession.",
14
+ category: "Technology",
15
+ date: "December 15, 2024",
16
+ readTime: "5 min read",
17
+ image: "/modern-university-campus-with-digital-interface-ov.jpg", // You can keep placeholder images or update paths later
18
+ },
19
+ {
20
+ id: 2,
21
+ title: "The Hidden Dangers of Parental Pressure",
22
+ excerpt:
23
+ "Why following someone else's dream can lead to career dissatisfaction. We explore the importance of choosing a field based on your own aptitude.",
24
+ category: "Student Life",
25
+ date: "December 10, 2024",
26
+ readTime: "7 min read",
27
+ image: "/students-working-on-projects-with-laptops-and-digi.jpg",
28
+ },
29
+ {
30
+ id: 3,
31
+ title: "Why You Need a 4-Year Career Roadmap",
32
+ excerpt:
33
+ "Success isn't just about getting a degree. Learn how a structured timeline of internships, projects, and skills can fast-track your employment.",
34
+ category: "Career Advice",
35
+ date: "December 5, 2024",
36
+ readTime: "6 min read",
37
+ image: "/digital-checklist-and-approval-workflow-interface.jpg",
38
+ },
39
+ {
40
+ id: 4,
41
+ title: "Top 5 High-Demand Careers in Pakistan for 2025",
42
+ excerpt:
43
+ "Based on our real-time market trend analysis, here are the fields offering the highest growth potential and salary packages this year.",
44
+ category: "Market Trends",
45
+ date: "November 28, 2024",
46
+ readTime: "4 min read",
47
+ image: "/dashboard-interface-with-multiple-user-roles-and-a.jpg",
48
+ },
49
+ {
50
+ id: 5,
51
+ title: "University Finder: Comparing Fees & Criteria",
52
+ excerpt:
53
+ "Stop browsing hundreds of websites. Learn how to use our centralized database to filter universities by location, cost, and admission requirements.",
54
+ category: "Education",
55
+ date: "November 20, 2024",
56
+ readTime: "5 min read",
57
+ image: "/professor-and-student-collaborating-with-digital-f.jpg",
58
+ },
59
+ {
60
+ id: 6,
61
+ title: "Understanding Your Psychometric Test Results",
62
+ excerpt: "A comprehensive guide to interpreting your profile vector, confidence scores, and what to do if your results surprise you.",
63
+ category: "Guidance",
64
+ date: "November 12, 2024",
65
+ readTime: "8 min read",
66
+ image: "/digital-security-shield-protecting-university-data.jpg",
67
+ },
68
+ ]
69
+
70
+ export default function BlogPage() {
71
+ return (
72
+ <div className="min-h-screen flex flex-col">
73
+ <Navbar />
74
+
75
+ <main className="flex-1">
76
+ {/* Hero Section */}
77
+ <section className="py-20 md:py-32 bg-linear-to-b from-secondary/50 to-background">
78
+ <div className="container mx-auto px-4 sm:px-6 lg:px-8">
79
+ <div className="max-w-3xl mx-auto text-center space-y-6">
80
+ <h1 className="text-4xl md:text-5xl font-bold text-balance">
81
+ {"Insights & Updates from "}
82
+ <span className="text-primary">Edu Path AI</span>
83
+ </h1>
84
+ <p className="text-lg md:text-xl text-muted-foreground leading-relaxed">
85
+ Stay informed about the latest trends in career counseling, AI technology, and university admissions
86
+ to make the best decisions for your future.
87
+ </p>
88
+ </div>
89
+ </div>
90
+ </section>
91
+
92
+ {/* Blog Posts Grid */}
93
+ <section className="py-20">
94
+ <div className="container mx-auto px-4 sm:px-6 lg:px-8">
95
+ <div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-8">
96
+ {blogPosts.map((post) => (
97
+ <Card key={post.id} className="overflow-hidden group hover:shadow-lg transition-shadow">
98
+ <div className="aspect-video overflow-hidden bg-muted">
99
+ <img
100
+ src={post.image || "/placeholder.svg"}
101
+ alt={post.title}
102
+ className="w-full h-full object-cover group-hover:scale-105 transition-transform duration-300"
103
+ />
104
+ </div>
105
+ <CardHeader>
106
+ <div className="flex items-center gap-2 mb-3">
107
+ <Badge variant="secondary">{post.category}</Badge>
108
+ </div>
109
+ <CardTitle className="text-xl leading-tight group-hover:text-primary transition-colors">
110
+ {post.title}
111
+ </CardTitle>
112
+ <CardDescription className="line-clamp-2 leading-relaxed">{post.excerpt}</CardDescription>
113
+ </CardHeader>
114
+ <CardContent>
115
+ <div className="flex items-center justify-between text-sm text-muted-foreground">
116
+ <div className="flex items-center gap-1">
117
+ <Calendar className="h-4 w-4" />
118
+ <span>{post.date}</span>
119
+ </div>
120
+ <div className="flex items-center gap-1">
121
+ <Clock className="h-4 w-4" />
122
+ <span>{post.readTime}</span>
123
+ </div>
124
+ </div>
125
+ <Link
126
+ href={`/blog/${post.id}`}
127
+ className="inline-flex items-center gap-2 mt-4 text-primary font-medium hover:gap-3 transition-all"
128
+ >
129
+ Read More <ArrowRight className="h-4 w-4" />
130
+ </Link>
131
+ </CardContent>
132
+ </Card>
133
+ ))}
134
+ </div>
135
+ </div>
136
+ </section>
137
+
138
+ {/* Newsletter Section */}
139
+ <section className="py-20 bg-card border-y">
140
+ <div className="container mx-auto px-4 sm:px-6 lg:px-8">
141
+ <div className="max-w-2xl mx-auto text-center space-y-6">
142
+ <h2 className="text-3xl font-bold">Stay Updated</h2>
143
+ <p className="text-muted-foreground leading-relaxed">
144
+ Subscribe to our newsletter to receive the latest career advice, university updates, and scholarship news
145
+ directly in your inbox.
146
+ </p>
147
+ <div className="flex flex-col sm:flex-row gap-3 max-w-md mx-auto">
148
+ <input
149
+ type="email"
150
+ placeholder="Enter your email"
151
+ className="flex-1 px-4 py-2 border rounded-md focus:outline-none focus:ring-2 focus:ring-primary"
152
+ />
153
+ <button className="px-6 py-2 bg-primary text-primary-foreground rounded-md hover:bg-primary/90 transition-colors font-medium">
154
+ Subscribe
155
+ </button>
156
+ </div>
157
+ <p className="text-xs text-muted-foreground">{"We respect your privacy. Unsubscribe at any time."}</p>
158
+ </div>
159
+ </div>
160
+ </section>
161
+ </main>
162
+
163
+ <Footer />
164
+ </div>
165
+ )
166
+ }
next/src/app/contact-us/page.tsx ADDED
@@ -0,0 +1,239 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ "use client"
2
+
3
+ import type React from "react"
4
+
5
+ import { useState } from "react"
6
+ import { Navbar } from "@/components/navbar"
7
+ import { Footer } from "@/components/footer"
8
+ import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card"
9
+ import { Button } from "@/components/ui/button"
10
+ import { Input } from "@/components/ui/input"
11
+ import { Textarea } from "@/components/ui/textarea"
12
+ import { Label } from "@/components/ui/label"
13
+ import { Mail, Phone, MapPin, Send } from "lucide-react"
14
+ import { toast } from "sonner"
15
+
16
+ export default function ContactPage() {
17
+ const [isSubmitting, setIsSubmitting] = useState(false)
18
+
19
+ const handleSubmit = async (e: React.FormEvent<HTMLFormElement>) => {
20
+ e.preventDefault()
21
+ setIsSubmitting(true)
22
+
23
+ // Simulate form submission
24
+ await new Promise((resolve) => setTimeout(resolve, 1500))
25
+
26
+ toast("Message sent successfully!", {
27
+ description: "Our support team will get back to you shortly.",
28
+ })
29
+
30
+ setIsSubmitting(false)
31
+ ; (e.target as HTMLFormElement).reset()
32
+ }
33
+
34
+ return (
35
+ <div className="min-h-screen flex flex-col">
36
+ <Navbar />
37
+
38
+ <main className="flex-1">
39
+ {/* Hero Section */}
40
+ <section className="py-20 md:py-32 bg-linear-to-b from-secondary/50 to-background">
41
+ <div className="container mx-auto px-4 sm:px-6 lg:px-8">
42
+ <div className="max-w-3xl mx-auto text-center space-y-6">
43
+ <h1 className="text-4xl md:text-5xl font-bold text-balance">
44
+ {"Get in "}
45
+ <span className="text-primary">Touch</span>
46
+ </h1>
47
+ <p className="text-lg md:text-xl text-muted-foreground leading-relaxed">
48
+ Have questions about your career recommendation? Need help with the university finder?
49
+ We're here to guide you every step of the way.
50
+ </p>
51
+ </div>
52
+ </div>
53
+ </section>
54
+
55
+ {/* Contact Section */}
56
+ <section className="py-20">
57
+ <div className="container mx-auto px-4 sm:px-6 lg:px-8">
58
+ <div className="grid grid-cols-1 lg:grid-cols-3 gap-8 max-w-6xl mx-auto">
59
+ {/* Contact Info */}
60
+ <div className="space-y-6">
61
+ <div>
62
+ <h2 className="text-2xl font-bold mb-6">Contact Information</h2>
63
+ <p className="text-muted-foreground leading-relaxed mb-8">
64
+ Reach out to our support team for assistance with account recovery, test results, or university data updates.
65
+ </p>
66
+ </div>
67
+
68
+ <Card>
69
+ <CardContent className="pt-6 space-y-6">
70
+ <div className="flex items-start gap-4">
71
+ <div className="h-10 w-10 rounded-lg bg-primary/10 flex items-center justify-center shrink-0">
72
+ <Mail className="h-5 w-5 text-primary" />
73
+ </div>
74
+ <div className="space-y-1">
75
+ <p className="font-medium">Email Support</p>
76
+ <p className="text-sm text-muted-foreground">help@edupathai.com</p>
77
+ <p className="text-sm text-muted-foreground">admin@edupathai.com</p>
78
+ </div>
79
+ </div>
80
+
81
+ <div className="flex items-start gap-4">
82
+ <div className="h-10 w-10 rounded-lg bg-primary/10 flex items-center justify-center shrink-0">
83
+ <Phone className="h-5 w-5 text-primary" />
84
+ </div>
85
+ <div className="space-y-1">
86
+ <p className="font-medium">Phone</p>
87
+ <p className="text-sm text-muted-foreground">+92 (334) 061-5582</p>
88
+ <p className="text-sm text-muted-foreground">Mon-Fri 9am-5pm PKT</p>
89
+ </div>
90
+ </div>
91
+
92
+ <div className="flex items-start gap-4">
93
+ <div className="h-10 w-10 rounded-lg bg-primary/10 flex items-center justify-center shrink-0">
94
+ <MapPin className="h-5 w-5 text-primary" />
95
+ </div>
96
+ <div className="space-y-1">
97
+ <p className="font-medium">Department Location</p>
98
+ <p className="text-sm text-muted-foreground">
99
+ Department of Software Engineering
100
+ <br />
101
+ Lahore Garrison University, Lahore
102
+ </p>
103
+ </div>
104
+ </div>
105
+ </CardContent>
106
+ </Card>
107
+ </div>
108
+
109
+ {/* Contact Form */}
110
+ <Card className="lg:col-span-2">
111
+ <CardHeader>
112
+ <CardTitle>Send us a Message</CardTitle>
113
+ <CardDescription>Fill out the form below for inquiries about features, partnerships, or technical issues.</CardDescription>
114
+ </CardHeader>
115
+ <CardContent>
116
+ <form onSubmit={handleSubmit} className="space-y-6">
117
+ <div className="grid grid-cols-1 md:grid-cols-2 gap-6">
118
+ <div className="space-y-2">
119
+ <Label htmlFor="firstName">First Name</Label>
120
+ <Input id="firstName" name="firstName" required placeholder=" " />
121
+ </div>
122
+ <div className="space-y-2">
123
+ <Label htmlFor="lastName">Last Name</Label>
124
+ <Input id="lastName" name="lastName" required placeholder=" " />
125
+ </div>
126
+ </div>
127
+
128
+ <div className="space-y-2">
129
+ <Label htmlFor="email">Email</Label>
130
+ <Input id="email" name="email" type="email" required placeholder=" " />
131
+ </div>
132
+
133
+ <div className="space-y-2">
134
+ <Label htmlFor="category">Inquiry Type</Label>
135
+ <Input id="category" name="category" placeholder="e.g., Technical Support, Feature Request" />
136
+ </div>
137
+
138
+ <div className="space-y-2">
139
+ <Label htmlFor="subject">Subject</Label>
140
+ <Input id="subject" name="subject" required placeholder="How can we help you?" />
141
+ </div>
142
+
143
+ <div className="space-y-2">
144
+ <Label htmlFor="message">Message</Label>
145
+ <Textarea
146
+ id="message"
147
+ name="message"
148
+ required
149
+ rows={6}
150
+ placeholder="Describe your issue or question..."
151
+ className="resize-none"
152
+ />
153
+ </div>
154
+
155
+ <Button type="submit" size="lg" className="w-full" disabled={isSubmitting}>
156
+ {isSubmitting ? (
157
+ <>Sending...</>
158
+ ) : (
159
+ <>
160
+ Send Message <Send className="ml-2 h-4 w-4" />
161
+ </>
162
+ )}
163
+ </Button>
164
+ </form>
165
+ </CardContent>
166
+ </Card>
167
+ </div>
168
+ </div>
169
+ </section>
170
+
171
+ {/* FAQ Section */}
172
+ <section className="py-20 bg-card border-y">
173
+ <div className="container mx-auto px-4 sm:px-6 lg:px-8">
174
+ <div className="max-w-4xl mx-auto">
175
+ <div className="text-center space-y-4 mb-12">
176
+ <h2 className="text-3xl font-bold">Frequently Asked Questions</h2>
177
+ <p className="text-muted-foreground leading-relaxed">
178
+ Common questions about our career guidance platform.
179
+ </p>
180
+ </div>
181
+
182
+ <div className="space-y-6">
183
+ <Card>
184
+ <CardHeader>
185
+ <CardTitle className="text-lg">How accurate is the career recommendation?</CardTitle>
186
+ </CardHeader>
187
+ <CardContent>
188
+ <p className="text-muted-foreground leading-relaxed">
189
+ Our AI model is trained on a vast dataset of career profiles and aptitudes, achieving an 85% match accuracy.
190
+ However, we recommend treating the results as expert guidance rather than an absolute rule.
191
+ </p>
192
+ </CardContent>
193
+ </Card>
194
+
195
+ <Card>
196
+ <CardHeader>
197
+ <CardTitle className="text-lg">Can I retake the psychometric test?</CardTitle>
198
+ </CardHeader>
199
+ <CardContent>
200
+ <p className="text-muted-foreground leading-relaxed">
201
+ Yes, you can retake the test after a 10-day cooldown period. This ensures that your interests have
202
+ genuinely evolved rather than just momentary changes in mood.
203
+ </p>
204
+ </CardContent>
205
+ </Card>
206
+
207
+ <Card>
208
+ <CardHeader>
209
+ <CardTitle className="text-lg">Is my data shared with universities?</CardTitle>
210
+ </CardHeader>
211
+ <CardContent>
212
+ <p className="text-muted-foreground leading-relaxed">
213
+ No. Your psychometric test results and personal profile are private. We only use your data to generate
214
+ recommendations for you. We do not sell student data to third parties.
215
+ </p>
216
+ </CardContent>
217
+ </Card>
218
+
219
+ <Card>
220
+ <CardHeader>
221
+ <CardTitle className="text-lg">How often is the university data updated?</CardTitle>
222
+ </CardHeader>
223
+ <CardContent>
224
+ <p className="text-muted-foreground leading-relaxed">
225
+ Our database is updated every semester to reflect the latest fee structures, admission deadlines,
226
+ and new degree programs offered by universities across Pakistan.
227
+ </p>
228
+ </CardContent>
229
+ </Card>
230
+ </div>
231
+ </div>
232
+ </div>
233
+ </section>
234
+ </main>
235
+
236
+ <Footer />
237
+ </div>
238
+ )
239
+ }
next/src/app/dashboard/compare/page.tsx ADDED
@@ -0,0 +1,178 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ 'use client';
2
+
3
+ import { useState } from 'react';
4
+ import { createClient } from '@supabase/supabase-js';
5
+ import Link from 'next/link';
6
+
7
+ // Initialize Supabase Client (Client-side)
8
+ const supabase = createClient(
9
+ process.env.NEXT_PUBLIC_SUPABASE_URL!,
10
+ process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY!
11
+ );
12
+
13
+ export default function ComparePage() {
14
+ const [query1, setQuery1] = useState('');
15
+ const [query2, setQuery2] = useState('');
16
+ const [results1, setResults1] = useState<any[]>([]);
17
+ const [results2, setResults2] = useState<any[]>([]);
18
+ const [uni1, setUni1] = useState<any>(null);
19
+ const [uni2, setUni2] = useState<any>(null);
20
+
21
+ // Search Function
22
+ const searchUni = async (query: string, setResults: Function) => {
23
+ if (query.length < 2) return;
24
+ const { data } = await supabase
25
+ .from('universities')
26
+ .select('*')
27
+ .ilike('university_name', `%${query}%`)
28
+ .limit(5);
29
+ setResults(data || []);
30
+ };
31
+
32
+ return (
33
+ <div className="min-h-screen bg-gray-50 p-6 md:p-12">
34
+ <div className="max-w-6xl mx-auto">
35
+ <h1 className="text-3xl font-bold text-blue-900 mb-8 text-center">Compare Universities</h1>
36
+
37
+ {/* SELECTION AREA */}
38
+ <div className="grid grid-cols-1 md:grid-cols-2 gap-8 mb-12">
39
+
40
+ {/* UNIVERSITY 1 SELECTOR */}
41
+ <div className="bg-white p-6 rounded-xl shadow-sm border border-gray-200">
42
+ <h3 className="font-bold text-gray-700 mb-4">University A</h3>
43
+ {!uni1 ? (
44
+ <div className="relative">
45
+ <input
46
+ type="text"
47
+ placeholder="Search (e.g. NUST)..."
48
+ className="w-full p-3 border rounded-lg focus:ring-2 focus:ring-blue-500"
49
+ onChange={(e) => {
50
+ setQuery1(e.target.value);
51
+ searchUni(e.target.value, setResults1);
52
+ }}
53
+ />
54
+ {results1.length > 0 && (
55
+ <div className="absolute w-full bg-white border mt-1 rounded-lg shadow-lg z-10">
56
+ {results1.map((u) => (
57
+ <div
58
+ key={u.id}
59
+ className="p-3 hover:bg-blue-50 cursor-pointer"
60
+ onClick={() => { setUni1(u); setResults1([]); }}
61
+ >
62
+ {u.university_name}
63
+ </div>
64
+ ))}
65
+ </div>
66
+ )}
67
+ </div>
68
+ ) : (
69
+ <div className="flex justify-between items-center bg-blue-50 p-4 rounded-lg border border-blue-100">
70
+ <span className="font-bold text-blue-900">{uni1.university_name}</span>
71
+ <button onClick={() => setUni1(null)} className="text-red-500 text-sm hover:underline">Change</button>
72
+ </div>
73
+ )}
74
+ </div>
75
+
76
+ {/* UNIVERSITY 2 SELECTOR */}
77
+ <div className="bg-white p-6 rounded-xl shadow-sm border border-gray-200">
78
+ <h3 className="font-bold text-gray-700 mb-4">University B</h3>
79
+ {!uni2 ? (
80
+ <div className="relative">
81
+ <input
82
+ type="text"
83
+ placeholder="Search (e.g. LUMS)..."
84
+ className="w-full p-3 border rounded-lg focus:ring-2 focus:ring-blue-500"
85
+ onChange={(e) => {
86
+ setQuery2(e.target.value);
87
+ searchUni(e.target.value, setResults2);
88
+ }}
89
+ />
90
+ {results2.length > 0 && (
91
+ <div className="absolute w-full bg-white border mt-1 rounded-lg shadow-lg z-10">
92
+ {results2.map((u) => (
93
+ <div
94
+ key={u.id}
95
+ className="p-3 hover:bg-blue-50 cursor-pointer"
96
+ onClick={() => { setUni2(u); setResults2([]); }}
97
+ >
98
+ {u.university_name}
99
+ </div>
100
+ ))}
101
+ </div>
102
+ )}
103
+ </div>
104
+ ) : (
105
+ <div className="flex justify-between items-center bg-blue-50 p-4 rounded-lg border border-blue-100">
106
+ <span className="font-bold text-blue-900">{uni2.university_name}</span>
107
+ <button onClick={() => setUni2(null)} className="text-red-500 text-sm hover:underline">Change</button>
108
+ </div>
109
+ )}
110
+ </div>
111
+ </div>
112
+
113
+ {/* COMPARISON TABLE */}
114
+ {uni1 && uni2 && (
115
+ <div className="bg-white rounded-2xl shadow-lg border border-gray-200 overflow-hidden">
116
+ <table className="w-full text-left">
117
+ <thead>
118
+ <tr className="bg-gray-100 border-b border-gray-200">
119
+ <th className="p-6 text-gray-500 font-medium w-1/3">Metric</th>
120
+ <th className="p-6 font-bold text-blue-900 w-1/3">{uni1.university_name}</th>
121
+ <th className="p-6 font-bold text-blue-900 w-1/3">{uni2.university_name}</th>
122
+ </tr>
123
+ </thead>
124
+ <tbody className="divide-y divide-gray-100">
125
+
126
+ {/* RANK COMPARISON */}
127
+ <tr>
128
+ <td className="p-6 font-medium text-gray-700">Global Rank</td>
129
+ <td className={`p-6 font-bold ${uni1.rank < uni2.rank ? 'text-green-600' : 'text-gray-900'}`}>
130
+ #{uni1.rank}
131
+ </td>
132
+ <td className={`p-6 font-bold ${uni2.rank < uni1.rank ? 'text-green-600' : 'text-gray-900'}`}>
133
+ #{uni2.rank}
134
+ </td>
135
+ </tr>
136
+
137
+ {/* TUITION COMPARISON */}
138
+ <tr>
139
+ <td className="p-6 font-medium text-gray-700">Est. Annual Fee</td>
140
+ <td className={`p-6 font-bold ${uni1.avg_tuition_usd < uni2.avg_tuition_usd ? 'text-green-600' : 'text-gray-900'}`}>
141
+ ${uni1.avg_tuition_usd?.toLocaleString() || "N/A"}
142
+ </td>
143
+ <td className={`p-6 font-bold ${uni2.avg_tuition_usd < uni1.avg_tuition_usd ? 'text-green-600' : 'text-gray-900'}`}>
144
+ ${uni2.avg_tuition_usd?.toLocaleString() || "N/A"}
145
+ </td>
146
+ </tr>
147
+
148
+ {/* LOCATION */}
149
+ <tr>
150
+ <td className="p-6 font-medium text-gray-700">Location</td>
151
+ <td className="p-6 text-gray-600">{uni1.country}</td>
152
+ <td className="p-6 text-gray-600">{uni2.country}</td>
153
+ </tr>
154
+
155
+ {/* ACTION BUTTONS */}
156
+ <tr className="bg-gray-50">
157
+ <td className="p-6"></td>
158
+ <td className="p-6">
159
+ <Link href={`/dashboard/university/${uni1.id}`} className="text-blue-600 hover:underline font-bold">
160
+ View Details &rarr;
161
+ </Link>
162
+ </td>
163
+ <td className="p-6">
164
+ <Link href={`/dashboard/university/${uni2.id}`} className="text-blue-600 hover:underline font-bold">
165
+ View Details &rarr;
166
+ </Link>
167
+ </td>
168
+ </tr>
169
+
170
+ </tbody>
171
+ </table>
172
+ </div>
173
+ )}
174
+
175
+ </div>
176
+ </div>
177
+ );
178
+ }
next/src/app/dashboard/layout.tsx ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import { SidebarProvider, SidebarTrigger } from "@/components/ui/sidebar"
2
+ import { DashboardSidebar } from "@/components/dashboard-sidebar"
3
+
4
+ export default function DashboardLayout({
5
+ children,
6
+ }: {
7
+ children: React.ReactNode
8
+ }) {
9
+ return (
10
+ <SidebarProvider>
11
+ <div className="flex min-h-screen w-full bg-linear-to-b from-indigo-50 via-white to-white">
12
+ {/* This loads the actual functional sidebar, not just an icon */}
13
+ <DashboardSidebar />
14
+
15
+ <main className="flex-1 overflow-auto">
16
+ {/* This button allows mobile users to open/close the menu */}
17
+ <div className="p-4">
18
+ <SidebarTrigger />
19
+ </div>
20
+
21
+ {/* This is where your page content (Dashboard, Roadmap, etc.) appears */}
22
+ {children}
23
+ </main>
24
+ </div>
25
+ </SidebarProvider>
26
+ )
27
+ }
next/src/app/dashboard/page.tsx ADDED
@@ -0,0 +1,98 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import Link from "next/link"
2
+ import { MessageSquare, GraduationCap, Map, Scale } from "lucide-react" // 👈 Added Scale icon here
3
+ import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card"
4
+ import { Footer } from "@/components/footer"
5
+
6
+ export default function DashboardPage() {
7
+ return (
8
+ <div className="mx-auto max-w-6xl px-4 py-8 sm:px-6 lg:px-8">
9
+ <div className="mb-12 text-center">
10
+ <h1 className="mb-4 font-bold text-4xl text-foreground text-balance">Your Edu Path AI Dashboard</h1>
11
+ <p className="mx-auto max-w-2xl text-muted-foreground text-xl text-pretty">
12
+ Navigate your academic journey with intelligent insights and comprehensive university data
13
+ </p>
14
+ </div>
15
+
16
+ <div className="mb-8 text-center">
17
+ <h2 className="mb-8 font-semibold text-2xl text-foreground">How would you like to get started?</h2>
18
+
19
+ {/* 👇 UPDATED GRID: Now handles 4 items nicely */}
20
+ <div className="mx-auto grid max-w-6xl gap-6 md:grid-cols-2 lg:grid-cols-4">
21
+
22
+ {/* Card 1: Chatbot */}
23
+ <Card className="group cursor-pointer border-2 transition-all duration-300 hover:scale-105 hover:border-indigo-600 hover:shadow-xl">
24
+ <Link href="/dashboard/chatbot" className="block h-full">
25
+ <CardHeader className="pb-4">
26
+ <div className="mx-auto mb-4 flex h-16 w-16 items-center justify-center rounded-full bg-indigo-100 transition-transform group-hover:scale-110">
27
+ <MessageSquare className="h-8 w-8 text-indigo-600" />
28
+ </div>
29
+ <CardTitle className="text-xl text-center">AI Career Advisor</CardTitle>
30
+ </CardHeader>
31
+ <CardContent>
32
+ <CardDescription className="text-center">
33
+ Chat with our AI to find your perfect career path.
34
+ </CardDescription>
35
+ </CardContent>
36
+ </Link>
37
+ </Card>
38
+
39
+ {/* Card 2: Universities */}
40
+ <Card className="group cursor-pointer border-2 transition-all duration-300 hover:scale-105 hover:border-indigo-600 hover:shadow-xl">
41
+ <Link href="/dashboard/university" className="block h-full">
42
+ <CardHeader className="pb-4">
43
+ <div className="mx-auto mb-4 flex h-16 w-16 items-center justify-center rounded-full bg-indigo-100 transition-transform group-hover:scale-110">
44
+ <GraduationCap className="h-8 w-8 text-indigo-600" />
45
+ </div>
46
+ <CardTitle className="text-xl text-center">Explore Universities</CardTitle>
47
+ </CardHeader>
48
+ <CardContent>
49
+ <CardDescription className="text-center">
50
+ Browse 1,800+ top universities and fee structures.
51
+ </CardDescription>
52
+ </CardContent>
53
+ </Link>
54
+ </Card>
55
+
56
+ {/* Card 3: Roadmap */}
57
+ <Card className="group cursor-pointer border-2 transition-all duration-300 hover:scale-105 hover:border-indigo-600 hover:shadow-xl">
58
+ <Link href="/dashboard/roadmap" className="block h-full">
59
+ <CardHeader className="pb-4">
60
+ <div className="mx-auto mb-4 flex h-16 w-16 items-center justify-center rounded-full bg-indigo-100 transition-transform group-hover:scale-110">
61
+ <Map className="h-8 w-8 text-indigo-600" />
62
+ </div>
63
+ <CardTitle className="text-xl text-center">Degree Roadmap</CardTitle>
64
+ </CardHeader>
65
+ <CardContent>
66
+ <CardDescription className="text-center">
67
+ A complete guide to skills and subjects for your major.
68
+ </CardDescription>
69
+ </CardContent>
70
+ </Link>
71
+ </Card>
72
+
73
+ {/* 👇 Card 4: COMPARE TOOL (NEW) */}
74
+ <Card className="group cursor-pointer border-2 transition-all duration-300 hover:scale-105 hover:border-green-600 hover:shadow-xl">
75
+ <Link href="/dashboard/compare" className="block h-full">
76
+ <CardHeader className="pb-4">
77
+ <div className="mx-auto mb-4 flex h-16 w-16 items-center justify-center rounded-full bg-green-100 transition-transform group-hover:scale-110">
78
+ <Scale className="h-8 w-8 text-green-600" />
79
+ </div>
80
+ <CardTitle className="text-xl text-center">Compare Tool</CardTitle>
81
+ </CardHeader>
82
+ <CardContent>
83
+ <CardDescription className="text-center">
84
+ Compare fees and rankings side-by-side.
85
+ </CardDescription>
86
+ </CardContent>
87
+ </Link>
88
+ </Card>
89
+
90
+ </div>
91
+ </div>
92
+
93
+ <div className="mt-12 rounded-lg border bg-card p-6 text-center shadow-sm">
94
+ <Footer />
95
+ </div>
96
+ </div>
97
+ )
98
+ }
next/src/app/dashboard/roadmap/page.tsx ADDED
@@ -0,0 +1,482 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ "use client"
2
+
3
+ import { useState } from "react";
4
+ import {
5
+ Code, Briefcase, Stethoscope, FlaskConical, Palette, Scale,
6
+ Cpu, Building2, TrendingUp, ShieldCheck, Calculator, BookOpen,
7
+ Camera, Plane, GraduationCap, HeartHandshake, Globe, Layout
8
+ } from "lucide-react";
9
+
10
+ // --- 1. THE COMPLETE DATA (All Fields) ---
11
+ const roadmaps = {
12
+ // === CATEGORY: TECHNOLOGY & ENGINEERING ===
13
+ cs: {
14
+ category: "Tech & Engineering",
15
+ title: "Computer Science (CS/SE)",
16
+ icon: Code,
17
+ description: "The path to becoming a Software Engineer, Data Scientist, or AI Specialist.",
18
+ universityFocus: [
19
+ "Data Structures & Algorithms (The interview standard)",
20
+ "Object Oriented Programming (OOP)",
21
+ "Database Systems (SQL)",
22
+ "Operating Systems & Computer Networks"
23
+ ],
24
+ externalSkills: [
25
+ { name: "Full Stack Web Dev", detail: "React, Next.js, Node.js" },
26
+ { name: "Version Control", detail: "Git & GitHub (Essential)" },
27
+ { name: "Cloud Computing", detail: "AWS, Azure, or Docker basics" },
28
+ { name: "Portfolio Building", detail: "Build 2-3 real apps to show recruiters" }
29
+ ]
30
+ },
31
+ engineering: {
32
+ category: "Tech & Engineering",
33
+ title: "Electrical/Mechanical Eng.",
34
+ icon: Cpu,
35
+ description: "For Engineers working with hardware, robotics, power, or machines.",
36
+ universityFocus: [
37
+ "Circuit Analysis / Thermodynamics",
38
+ "Control Systems & Automation",
39
+ "Embedded Systems",
40
+ "Engineering Mechanics & Materials"
41
+ ],
42
+ externalSkills: [
43
+ { name: "Simulation Software", detail: "MATLAB, Simulink, SolidWorks, ANSYS" },
44
+ { name: "IoT & Microcontrollers", detail: "Arduino, Raspberry Pi, ESP32" },
45
+ { name: "PCB Design", detail: "Altium Designer, KiCad" },
46
+ { name: "Coding for Hardware", detail: "Python, C/C++" }
47
+ ]
48
+ },
49
+ civil: {
50
+ category: "Tech & Engineering",
51
+ title: "Civil Engineering",
52
+ icon: Building2,
53
+ description: "Designing the infrastructure of the world: bridges, roads, and dams.",
54
+ universityFocus: [
55
+ "Structural Analysis",
56
+ "Fluid Mechanics & Hydraulics",
57
+ "Geotechnical Engineering",
58
+ "Concrete & Steel Design"
59
+ ],
60
+ externalSkills: [
61
+ { name: "Design Software", detail: "AutoCAD Civil 3D, STAAD.Pro, ETABS" },
62
+ { name: "Project Management", detail: "Primavera P6, MS Project" },
63
+ { name: "Site Safety", detail: "OSHA Certification / HSE Standards" },
64
+ { name: "Sustainability", detail: "LEED Certification basics" }
65
+ ]
66
+ },
67
+
68
+ // === CATEGORY: BUSINESS & FINANCE ===
69
+ bba: {
70
+ category: "Business & Management",
71
+ title: "Business Admin (BBA/MBA)",
72
+ icon: Briefcase,
73
+ description: "For future Managers, Entrepreneurs, and HR Specialists.",
74
+ universityFocus: [
75
+ "Financial Accounting & Analysis",
76
+ "Marketing Management",
77
+ "Human Resource Management (HRM)",
78
+ "Supply Chain Management"
79
+ ],
80
+ externalSkills: [
81
+ { name: "Data Analysis Tools", detail: "Advanced Excel (Pivot Tables), PowerBI" },
82
+ { name: "Digital Marketing", detail: "SEO, Google Ads, Meta Ads Manager" },
83
+ { name: "Soft Skills", detail: "Public Speaking & Negotiation" },
84
+ { name: "Project Tools", detail: "JIRA, Trello, Asana" }
85
+ ]
86
+ },
87
+ accounting: {
88
+ category: "Business & Management",
89
+ title: "Accounting & Finance (ACCA)",
90
+ icon: Calculator,
91
+ description: "For Auditors, Financial Analysts, and Tax Consultants.",
92
+ universityFocus: [
93
+ "Financial Reporting",
94
+ "Taxation Laws",
95
+ "Audit & Assurance",
96
+ "Corporate Finance"
97
+ ],
98
+ externalSkills: [
99
+ { name: "Accounting Software", detail: "QuickBooks, Xero, SAP" },
100
+ { name: "Financial Modeling", detail: "Valuation models in Excel" },
101
+ { name: "Certifications", detail: "CFA Level 1, ACCA papers" },
102
+ { name: "Regulation Knowledge", detail: "Local tax laws & IFRS" }
103
+ ]
104
+ },
105
+ economics: {
106
+ category: "Business & Management",
107
+ title: "Economics",
108
+ icon: TrendingUp,
109
+ description: "Analyzing markets, policy, and financial trends.",
110
+ universityFocus: [
111
+ "Micro & Macro Economics",
112
+ "Econometrics & Statistics",
113
+ "Game Theory",
114
+ "Development Economics"
115
+ ],
116
+ externalSkills: [
117
+ { name: "Statistical Tools", detail: "R, Stata, Python" },
118
+ { name: "Data Visualization", detail: "Tableau, PowerBI" },
119
+ { name: "Policy Analysis", detail: "Writing policy briefs" },
120
+ { name: "Finance Knowledge", detail: "Stock markets & banking systems" }
121
+ ]
122
+ },
123
+
124
+ // === CATEGORY: HEALTH & SCIENCE ===
125
+ medical: {
126
+ category: "Health & Science",
127
+ title: "Medical (MBBS/BDS)",
128
+ icon: Stethoscope,
129
+ description: "The path for Doctors, Dentists, and Health Professionals.",
130
+ universityFocus: [
131
+ "Anatomy & Physiology",
132
+ "Pathology & Pharmacology",
133
+ "Internal Medicine",
134
+ "Surgery Basics"
135
+ ],
136
+ externalSkills: [
137
+ { name: "Clinical Electives", detail: "Hospital internships" },
138
+ { name: "Research Writing", detail: "Publishing research papers" },
139
+ { name: "Patient Communication", detail: "Empathy & local languages" },
140
+ { name: "Licensing Prep", detail: "USMLE/PLAB/NLE prep" }
141
+ ]
142
+ },
143
+ biotech: {
144
+ category: "Health & Science",
145
+ title: "Biotechnology / Biology",
146
+ icon: FlaskConical,
147
+ description: "Merging biology with technology for research and pharma.",
148
+ universityFocus: [
149
+ "Molecular Biology",
150
+ "Genetics & Genomics",
151
+ "Microbiology",
152
+ "Bioinformatics"
153
+ ],
154
+ externalSkills: [
155
+ { name: "Lab Techniques", detail: "PCR, CRISPR, Gel Electrophoresis" },
156
+ { name: "Data Science", detail: "Python/R for bio-data" },
157
+ { name: "Regulatory Affairs", detail: "FDA/GMP guidelines" },
158
+ { name: "Scientific Writing", detail: "Grant writing" }
159
+ ]
160
+ },
161
+ psychology: {
162
+ category: "Health & Science",
163
+ title: "Psychology",
164
+ icon: HeartHandshake,
165
+ description: "Understanding human behavior, mental health, and HR.",
166
+ universityFocus: [
167
+ "Cognitive Psychology",
168
+ "Abnormal Psychology",
169
+ "Research Methods",
170
+ "Clinical Psychology"
171
+ ],
172
+ externalSkills: [
173
+ { name: "Counseling Skills", detail: "Active listening, CBT basics" },
174
+ { name: "HR Applications", detail: "Psychometric testing" },
175
+ { name: "Data Analysis", detail: "SPSS software mastery" },
176
+ { name: "User Research", detail: "UX Research methods" }
177
+ ]
178
+ },
179
+
180
+ // === CATEGORY: ARTS & HUMANITIES ===
181
+ law: {
182
+ category: "Arts & Humanities",
183
+ title: "Law (LLB/JD)",
184
+ icon: Scale,
185
+ description: "For Lawyers, Judges, and Corporate Legal Advisors.",
186
+ universityFocus: [
187
+ "Constitutional Law",
188
+ "Contract & Tort Law",
189
+ "Criminal Law",
190
+ "Corporate Law"
191
+ ],
192
+ externalSkills: [
193
+ { name: "Mooting", detail: "Moot Court competitions" },
194
+ { name: "Drafting", detail: "Legal contract writing" },
195
+ { name: "Public Speaking", detail: "Debating skills" },
196
+ { name: "Networking", detail: "Law firm internships" }
197
+ ]
198
+ },
199
+ media: {
200
+ category: "Arts & Humanities",
201
+ title: "Media & Journalism",
202
+ icon: Camera,
203
+ description: "Journalism, Mass Com, and Digital Media production.",
204
+ universityFocus: [
205
+ "News Writing & Reporting",
206
+ "Media Ethics & Law",
207
+ "Broadcasting",
208
+ "Public Relations (PR)"
209
+ ],
210
+ externalSkills: [
211
+ { name: "Video Editing", detail: "Premiere Pro, DaVinci Resolve" },
212
+ { name: "Content Creation", detail: "SEO Writing, Social Media" },
213
+ { name: "Photography", detail: "DSLR handling" },
214
+ { name: "Digital Tools", detail: "WordPress, CMS, Analytics" }
215
+ ]
216
+ },
217
+ design: {
218
+ category: "Arts & Humanities",
219
+ title: "Graphic Design / Fine Arts",
220
+ icon: Palette,
221
+ description: "Visual communication, branding, and UX/UI.",
222
+ universityFocus: [
223
+ "Color Theory & Typography",
224
+ "History of Art/Design",
225
+ "Visual Composition",
226
+ "Branding Identity"
227
+ ],
228
+ externalSkills: [
229
+ { name: "Design Suite", detail: "Photoshop, Illustrator, InDesign" },
230
+ { name: "UI/UX Design", detail: "Figma, Adobe XD" },
231
+ { name: "Portfolio", detail: "Behance/Dribbble portfolio" },
232
+ { name: "Motion Graphics", detail: "After Effects basics" }
233
+ ]
234
+ },
235
+ english: {
236
+ category: "Arts & Humanities",
237
+ title: "English Lit & Linguistics",
238
+ icon: BookOpen,
239
+ description: "Content writing, teaching, and editorial careers.",
240
+ universityFocus: [
241
+ "Literary Criticism",
242
+ "Sociolinguistics",
243
+ "Creative Writing",
244
+ "Post-Colonial Literature"
245
+ ],
246
+ externalSkills: [
247
+ { name: "Copywriting", detail: "SEO Content, Sales Copy" },
248
+ { name: "Technical Writing", detail: "Documentation skills" },
249
+ { name: "Teaching Certs", detail: "TEFL/TESOL" },
250
+ { name: "Editing", detail: "Professional proofreading" }
251
+ ]
252
+ },
253
+
254
+ // === CATEGORY: SPECIALIZED FIELDS ===
255
+ architecture: {
256
+ category: "Specialized",
257
+ title: "Architecture",
258
+ icon: Building2,
259
+ description: "For Architects, Interior Designers, and Urban Planners.",
260
+ universityFocus: [
261
+ "Design Studios",
262
+ "History of Architecture",
263
+ "Structural Systems",
264
+ "Building Materials"
265
+ ],
266
+ externalSkills: [
267
+ { name: "Digital Modeling", detail: "AutoCAD, Revit, SketchUp" },
268
+ { name: "Rendering", detail: "Lumion, V-Ray" },
269
+ { name: "Graphics", detail: "Adobe Suite" },
270
+ { name: "Site Experience", detail: "Construction site visits" }
271
+ ]
272
+ },
273
+ aviation: {
274
+ category: "Specialized",
275
+ title: "Aviation & Management",
276
+ icon: Plane,
277
+ description: "Pilots, Airport Managers, and Aerospace operations.",
278
+ universityFocus: [
279
+ "Aerodynamics",
280
+ "Aviation Law & Safety",
281
+ "Airport Operations",
282
+ "Navigation"
283
+ ],
284
+ externalSkills: [
285
+ { name: "Licensing", detail: "PPL/CPL hours" },
286
+ { name: "Safety Mgmt", detail: "SMS Certification" },
287
+ { name: "Logistics", detail: "Supply chain software" },
288
+ { name: "Languages", detail: "ICAO English proficiency" }
289
+ ]
290
+ },
291
+ education: {
292
+ category: "Specialized",
293
+ title: "Education & Teaching",
294
+ icon: GraduationCap,
295
+ description: "Training the next generation of teachers and policymakers.",
296
+ universityFocus: [
297
+ "Curriculum Development",
298
+ "Educational Psychology",
299
+ "Classroom Management",
300
+ "Assessment Strategies"
301
+ ],
302
+ externalSkills: [
303
+ { name: "EdTech", detail: "Canvas, Google Classroom" },
304
+ { name: "Special Needs", detail: "Sign Language basics" },
305
+ { name: "Public Speaking", detail: "Voice modulation" },
306
+ { name: "Lesson Planning", detail: "Digital lesson plans" }
307
+ ]
308
+ },
309
+ ir: {
310
+ category: "Specialized",
311
+ title: "International Relations",
312
+ icon: Globe,
313
+ description: "Diplomacy, NGOs, and Global Policy.",
314
+ universityFocus: [
315
+ "Political Theory",
316
+ "Foreign Policy Analysis",
317
+ "International Law",
318
+ "Conflict Resolution"
319
+ ],
320
+ externalSkills: [
321
+ { name: "Languages", detail: "French, Arabic, or Chinese" },
322
+ { name: "Research", detail: "Policy paper writing" },
323
+ { name: "Networking", detail: "Model UN (MUN)" },
324
+ { name: "Project Mgmt", detail: "Grant writing" }
325
+ ]
326
+ }
327
+ };
328
+
329
+ // Type definitions
330
+ type FieldKey = keyof typeof roadmaps;
331
+
332
+ // Categories for Sidebar Grouping
333
+ const categories = {
334
+ "Tech & Engineering": ["cs", "engineering", "civil"],
335
+ "Business & Management": ["bba", "accounting", "economics"],
336
+ "Health & Science": ["medical", "biotech", "psychology"],
337
+ "Arts & Humanities": ["law", "media", "design", "english"],
338
+ "Specialized": ["architecture", "aviation", "education", "ir"]
339
+ };
340
+
341
+ export default function RoadmapPage() {
342
+ const [selectedField, setSelectedField] = useState<FieldKey>("cs");
343
+
344
+ // Helper to safely get the current roadmap data
345
+ const currentRoadmap = roadmaps[selectedField] || roadmaps.cs;
346
+
347
+ return (
348
+ <div className="flex flex-col md:flex-row h-[calc(100vh-80px)]">
349
+
350
+ {/* 1. LEFT SIDEBAR: Categorized Selection */}
351
+ <aside className="w-full md:w-72 bg-white border-r h-full overflow-y-auto custom-scrollbar">
352
+ <div className="p-4 bg-white sticky top-0 z-10 border-b">
353
+ <h2 className="text-lg font-bold text-gray-900">Select Degree</h2>
354
+ </div>
355
+
356
+ <div className="p-4 space-y-6 pb-20">
357
+ {Object.entries(categories).map(([categoryName, keys]) => (
358
+ <div key={categoryName}>
359
+ <h3 className="text-xs font-bold text-gray-400 uppercase tracking-wider mb-2 px-2">
360
+ {categoryName}
361
+ </h3>
362
+ <div className="space-y-1">
363
+ {keys.map((key) => {
364
+ // Cast key to FieldKey to avoid TS errors
365
+ const fieldKey = key as FieldKey;
366
+ const data = roadmaps[fieldKey];
367
+ const Icon = data.icon;
368
+ const isSelected = selectedField === fieldKey;
369
+
370
+ return (
371
+ <button
372
+ key={fieldKey}
373
+ onClick={() => setSelectedField(fieldKey)}
374
+ className={`w-full flex items-center gap-3 px-3 py-2 rounded-lg transition-all text-left text-sm ${
375
+ isSelected
376
+ ? "bg-blue-50 text-blue-700 font-semibold border border-blue-200"
377
+ : "text-gray-600 hover:bg-gray-50"
378
+ }`}
379
+ >
380
+ <Icon className={`h-4 w-4 ${isSelected ? "text-blue-600" : "text-gray-400"}`} />
381
+ <span>{data.title}</span>
382
+ </button>
383
+ );
384
+ })}
385
+ </div>
386
+ </div>
387
+ ))}
388
+ </div>
389
+ </aside>
390
+
391
+ {/* 2. MAIN CONTENT AREA */}
392
+ <main className="flex-1 overflow-y-auto p-6 md:p-12 bg-gray-50">
393
+ <div className="max-w-4xl mx-auto pb-20">
394
+
395
+ {/* Header */}
396
+ <div className="mb-10">
397
+ <div className="inline-flex items-center gap-2 px-3 py-1 rounded-full bg-blue-100 text-blue-700 text-xs font-bold mb-4">
398
+ {currentRoadmap.category}
399
+ </div>
400
+ <h1 className="text-3xl md:text-4xl font-bold text-gray-900 mb-2 flex items-center gap-3">
401
+ {currentRoadmap.title}
402
+ </h1>
403
+ <p className="text-xl text-gray-600 leading-relaxed">
404
+ {currentRoadmap.description}
405
+ </p>
406
+ </div>
407
+
408
+ <div className="grid md:grid-cols-2 gap-8">
409
+
410
+ {/* CARD 1: University Focus */}
411
+ <div className="bg-white rounded-2xl shadow-sm border border-gray-200 overflow-hidden h-full">
412
+ <div className="bg-indigo-50 p-6 border-b border-indigo-100 flex items-center gap-3">
413
+ <div className="bg-white p-2 rounded-lg shadow-sm">
414
+ <Layout className="h-6 w-6 text-indigo-600" />
415
+ </div>
416
+ <div>
417
+ <h3 className="font-bold text-lg text-indigo-900">University Focus</h3>
418
+ <p className="text-indigo-600 text-sm">Core Academic Theory</p>
419
+ </div>
420
+ </div>
421
+ <div className="p-6">
422
+ <ul className="space-y-4">
423
+ {currentRoadmap.universityFocus.map((item, index) => (
424
+ <li key={index} className="flex items-start gap-3">
425
+ <span className="shrink-0 flex h-6 w-6 items-center justify-center rounded-full bg-indigo-100 text-indigo-600 text-xs font-bold mt-0.5">
426
+ {index + 1}
427
+ </span>
428
+ <span className="text-gray-700 font-medium leading-snug">{item}</span>
429
+ </li>
430
+ ))}
431
+ </ul>
432
+ </div>
433
+ </div>
434
+
435
+ {/* CARD 2: External Skills (Job Ready) */}
436
+ <div className="bg-white rounded-2xl shadow-sm border border-gray-200 overflow-hidden ring-1 ring-green-100 h-full">
437
+ <div className="bg-green-50 p-6 border-b border-green-100 flex items-center gap-3">
438
+ <div className="bg-white p-2 rounded-lg shadow-sm">
439
+ <TrendingUp className="h-6 w-6 text-green-600" />
440
+ </div>
441
+ <div>
442
+ <h3 className="font-bold text-lg text-green-900">Industry Skills</h3>
443
+ <p className="text-green-700 text-sm">Self-Learning Required</p>
444
+ </div>
445
+ </div>
446
+ <div className="p-6">
447
+ <ul className="space-y-5">
448
+ {currentRoadmap.externalSkills.map((skill, index) => (
449
+ <li key={index} className="group">
450
+ <div className="flex items-center gap-2 mb-1">
451
+ <ShieldCheck className="h-4 w-4 text-green-600" />
452
+ <span className="font-bold text-gray-900">{skill.name}</span>
453
+ </div>
454
+ <p className="text-gray-500 text-sm pl-6 leading-snug">{skill.detail}</p>
455
+ </li>
456
+ ))}
457
+ </ul>
458
+ </div>
459
+ </div>
460
+
461
+ </div>
462
+
463
+ {/* Pro Tip Footer */}
464
+ <div className="mt-10 bg-gray-900 text-white rounded-2xl p-8 shadow-xl">
465
+ <h3 className="text-lg font-bold mb-2 flex items-center gap-2">
466
+ <GraduationCap className="h-5 w-5 text-yellow-400" />
467
+ Expert Advice
468
+ </h3>
469
+ <p className="opacity-90 leading-relaxed text-sm md:text-base">
470
+ A degree gets you the interview, but <strong>skills get you the job</strong>.
471
+ {selectedField === 'cs' && " Build a GitHub portfolio."}
472
+ {selectedField === 'design' && " Your Behance portfolio matters more than your GPA."}
473
+ {selectedField === 'medical' && " Clinical experience is just as vital as USMLE scores."}
474
+ {selectedField === 'law' && " Networking and internships are key in the legal world."}
475
+ </p>
476
+ </div>
477
+
478
+ </div>
479
+ </main>
480
+ </div>
481
+ );
482
+ }
next/src/app/dashboard/university/[id]/page.tsx ADDED
@@ -0,0 +1,214 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import { createClient } from '@supabase/supabase-js';
2
+ import Groq from 'groq-sdk';
3
+ import Link from 'next/link';
4
+ import { notFound } from 'next/navigation';
5
+ import { Suspense } from 'react';
6
+
7
+ // --- CONFIGURATION ---
8
+ const supabase = createClient(
9
+ process.env.NEXT_PUBLIC_SUPABASE_URL!,
10
+ process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY!
11
+ );
12
+
13
+ const groq = new Groq({
14
+ apiKey: process.env.GROQ_API_KEY
15
+ });
16
+
17
+ // --- COMPONENT: The AI Analysis (With "Top Programs" Restored) ---
18
+ async function AIAnalysisSection({ uniName, country }: { uniName: string, country: string }) {
19
+ try {
20
+ // 1. Ask AI for specific details about THIS university
21
+ const chatCompletion = await groq.chat.completions.create({
22
+ messages: [{
23
+ role: 'user',
24
+ content: `Analyze "${uniName}" in "${country}".
25
+ Return valid JSON ONLY with these fields:
26
+ {
27
+ "admission_criteria": "Summarize requirements in one simple text string.",
28
+ "popular_programs": ["Program 1", "Program 2", "Program 3", "Program 4"],
29
+ "pros": ["Point 1", "Point 2"],
30
+ "cons": ["Point 1", "Point 2"]
31
+ }`
32
+ }],
33
+ model: 'llama-3.1-8b-instant',
34
+ response_format: { type: 'json_object' },
35
+ });
36
+
37
+ // 2. Parse the response safely
38
+ const content = chatCompletion.choices[0]?.message?.content || '{}';
39
+ let aiData;
40
+ try {
41
+ aiData = JSON.parse(content);
42
+ } catch (e) {
43
+ aiData = {};
44
+ }
45
+
46
+ // 🛡️ CRASH FIX: Ensure admission_criteria is ALWAYS a string
47
+ let safeCriteria = "Check official website for specific details.";
48
+ if (aiData.admission_criteria) {
49
+ if (typeof aiData.admission_criteria === 'string') {
50
+ safeCriteria = aiData.admission_criteria;
51
+ } else if (typeof aiData.admission_criteria === 'object') {
52
+ // If AI returns an object, join it into text
53
+ safeCriteria = Object.values(aiData.admission_criteria).join(". ");
54
+ }
55
+ }
56
+
57
+ // 🛡️ SAFETY: Ensure arrays exist for lists
58
+ const safePrograms = Array.isArray(aiData.popular_programs) ? aiData.popular_programs : ["General Sciences", "Arts", "Engineering"];
59
+ const safePros = Array.isArray(aiData.pros) ? aiData.pros : ["Strong academic reputation"];
60
+ const safeCons = Array.isArray(aiData.cons) ? aiData.cons : ["Competitive entry"];
61
+
62
+ return (
63
+ <div className="grid grid-cols-1 md:grid-cols-2 gap-8 animate-in fade-in duration-700">
64
+
65
+ {/* 1. ADMISSION CRITERIA (Blue Card) */}
66
+ <div className="bg-white rounded-2xl p-8 shadow-sm border border-gray-100">
67
+ <h2 className="text-xl font-bold text-gray-800 mb-4">🎓 Admission Requirements</h2>
68
+ <div className="bg-blue-50 border-l-4 border-blue-500 p-4 rounded-r-lg">
69
+ <p className="text-blue-900 font-medium text-lg leading-relaxed">{safeCriteria}</p>
70
+ </div>
71
+ </div>
72
+
73
+ {/* 2. POPULAR PROGRAMS (Orange Card - NEW) */}
74
+ <div className="bg-white rounded-2xl p-8 shadow-sm border border-gray-100">
75
+ <h2 className="text-xl font-bold text-gray-800 mb-4">🔥 Top Programs</h2>
76
+ <div className="flex flex-wrap gap-2">
77
+ {safePrograms.map((prog: any, i: number) => (
78
+ <span key={i} className="bg-orange-50 text-orange-700 px-3 py-1 rounded-full text-sm font-semibold border border-orange-200">
79
+ {typeof prog === 'string' ? prog : "General Degree"}
80
+ </span>
81
+ ))}
82
+ </div>
83
+ </div>
84
+
85
+ {/* 3. PROS (Green Card) */}
86
+ <div className="bg-white rounded-2xl p-6 shadow-sm border border-gray-100">
87
+ <h3 className="text-green-700 font-bold mb-4">✅ Why Study Here?</h3>
88
+ <ul className="space-y-3">
89
+ {safePros.map((pro: any, i: number) => (
90
+ <li key={i} className="flex items-start gap-2 text-gray-600 text-sm">
91
+ <span className="text-green-500 mt-1">●</span>
92
+ {typeof pro === 'string' ? pro : JSON.stringify(pro)}
93
+ </li>
94
+ ))}
95
+ </ul>
96
+ </div>
97
+
98
+ {/* 4. CONS (Red Card) */}
99
+ <div className="bg-white rounded-2xl p-6 shadow-sm border border-gray-100">
100
+ <h3 className="text-red-600 font-bold mb-4">⚠️ Considerations</h3>
101
+ <ul className="space-y-3">
102
+ {safeCons.map((con: any, i: number) => (
103
+ <li key={i} className="flex items-start gap-2 text-gray-600 text-sm">
104
+ <span className="text-red-400 mt-1">●</span>
105
+ {typeof con === 'string' ? con : JSON.stringify(con)}
106
+ </li>
107
+ ))}
108
+ </ul>
109
+ </div>
110
+ </div>
111
+ );
112
+ } catch (err) {
113
+ console.error("AI Error:", err);
114
+ return (
115
+ <div className="p-6 bg-red-50 text-red-600 rounded-lg border border-red-100">
116
+ <p><strong>AI Analysis Unavailable:</strong> We couldn't generate the report right now.</p>
117
+ </div>
118
+ );
119
+ }
120
+ }
121
+
122
+ // --- SKELETON: What to show while AI is thinking ---
123
+ function AISkeleton() {
124
+ return (
125
+ <div className="grid grid-cols-1 md:grid-cols-2 gap-8 animate-pulse">
126
+ <div className="md:col-span-1 h-48 bg-gray-200 rounded-2xl"></div>
127
+ <div className="md:col-span-1 h-48 bg-gray-200 rounded-2xl"></div>
128
+ <div className="h-48 bg-gray-200 rounded-2xl"></div>
129
+ <div className="h-48 bg-gray-200 rounded-2xl"></div>
130
+ </div>
131
+ );
132
+ }
133
+
134
+ // --- MAIN PAGE ---
135
+ export default async function UniversityDetailsPage({ params }: { params: Promise<{ id: string }> }) {
136
+ const { id } = await params;
137
+
138
+ // 1. Fetch Main University Data
139
+ const { data: uni, error } = await supabase
140
+ .from('universities')
141
+ .select('*')
142
+ .eq('id', id)
143
+ .single();
144
+
145
+ if (error || !uni) notFound();
146
+
147
+ // 2. Fetch 3 Similar Universities (Same Country, Different ID)
148
+ const { data: similarUnis } = await supabase
149
+ .from('universities')
150
+ .select('id, university_name, rank, country, avg_tuition_usd')
151
+ .eq('country', uni.country) // Same Country
152
+ .neq('id', uni.id) // Not the current one
153
+ .limit(3); // Get 3
154
+
155
+ // Format Fee Helper
156
+ const formatFee = (amount: number) =>
157
+ new Intl.NumberFormat('en-US', { style: 'currency', currency: 'USD', maximumFractionDigits: 0 }).format(amount);
158
+
159
+ const formattedTuition = uni.avg_tuition_usd ? formatFee(uni.avg_tuition_usd) : "Contact Uni";
160
+
161
+ return (
162
+ <div className="min-h-screen bg-gray-50 p-6 md:p-12">
163
+ <div className="max-w-5xl mx-auto space-y-8">
164
+
165
+ {/* BACK BUTTON */}
166
+ <Link href="/dashboard/university" className="inline-flex items-center text-gray-500 hover:text-blue-600 transition-colors font-medium">
167
+ ← Back to List
168
+ </Link>
169
+
170
+ {/* HEADER */}
171
+ <div className="bg-white rounded-2xl p-8 shadow-sm border border-gray-100 flex flex-col md:flex-row justify-between items-center gap-6">
172
+ <div>
173
+ <div className="flex items-center gap-3 mb-2">
174
+ <span className="bg-blue-100 text-blue-700 text-xs font-bold px-3 py-1 rounded-full uppercase">{uni.country}</span>
175
+ <span className="text-gray-400 text-sm font-medium">Rank #{uni.rank}</span>
176
+ </div>
177
+ <h1 className="text-4xl font-extrabold text-gray-900">{uni.university_name}</h1>
178
+ <p className="text-gray-500 mt-2">Annual Fee: <span className="text-green-600 font-bold">{formattedTuition}</span></p>
179
+ </div>
180
+ <Link href={`https://www.google.com/search?q=apply+to+${uni.university_name}`} target="_blank" className="bg-blue-600 text-white px-8 py-3 rounded-xl font-bold shadow-lg hover:bg-blue-700 transition-transform hover:-translate-y-1">
181
+ Apply Now ↗
182
+ </Link>
183
+ </div>
184
+
185
+ {/* AI SECTION (Wrapped in Suspense) */}
186
+ <Suspense fallback={<AISkeleton />}>
187
+ <AIAnalysisSection uniName={uni.university_name} country={uni.country} />
188
+ </Suspense>
189
+
190
+ {/* SIMILAR UNIVERSITIES SECTION */}
191
+ {similarUnis && similarUnis.length > 0 && (
192
+ <div className="pt-12 border-t border-gray-200 mt-8">
193
+ <h3 className="text-2xl font-bold text-gray-900 mb-6">Explore other universities in {uni.country}</h3>
194
+
195
+ <div className="grid grid-cols-1 md:grid-cols-3 gap-6">
196
+ {similarUnis.map((sim) => (
197
+ <Link key={sim.id} href={`/dashboard/university/${sim.id}`} className="group block bg-white rounded-xl p-6 border border-gray-200 hover:border-blue-400 hover:shadow-md transition-all">
198
+ <div className="flex justify-between items-start mb-4">
199
+ <span className="bg-gray-100 text-gray-600 text-xs font-bold px-2 py-1 rounded">Rank #{sim.rank}</span>
200
+ </div>
201
+ <h4 className="text-lg font-bold text-gray-900 group-hover:text-blue-600 transition-colors truncate">{sim.university_name}</h4>
202
+ <p className="text-sm text-gray-500 mt-2">
203
+ Est. Fee: <span className="font-semibold text-green-600">{sim.avg_tuition_usd ? formatFee(sim.avg_tuition_usd) : "N/A"}</span>
204
+ </p>
205
+ </Link>
206
+ ))}
207
+ </div>
208
+ </div>
209
+ )}
210
+
211
+ </div>
212
+ </div>
213
+ );
214
+ }
next/src/app/dashboard/university/page.tsx ADDED
@@ -0,0 +1,151 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import { createClient } from '@supabase/supabase-js';
2
+ import Link from 'next/link';
3
+ import UniversityFilters from '@/components/CountryFilter';
4
+
5
+ const supabase = createClient(
6
+ process.env.NEXT_PUBLIC_SUPABASE_URL!,
7
+ process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY!
8
+ );
9
+
10
+ // ✅ 1. Paginated Country Fetcher (This fixes the dropdown limit)
11
+ async function getCountries() {
12
+ let allCountries: any[] = [];
13
+ let from = 0;
14
+ const pageSize = 1000;
15
+ let keepFetching = true;
16
+
17
+ while (keepFetching) {
18
+ const { data, error } = await supabase
19
+ .from('universities')
20
+ .select('country')
21
+ .not('country', 'is', null)
22
+ .order('country', { ascending: true })
23
+ .range(from, from + pageSize - 1);
24
+
25
+ if (error || !data || data.length === 0) {
26
+ keepFetching = false;
27
+ } else {
28
+ allCountries = [...allCountries, ...data];
29
+ from += pageSize;
30
+ if (data.length < pageSize) keepFetching = false;
31
+ }
32
+ }
33
+
34
+ return Array.from(new Set(allCountries.map(item => item.country)));
35
+ }
36
+
37
+ async function getUniversities(country: string | undefined, search: string | undefined) {
38
+ let query = supabase
39
+ .from('universities')
40
+ .select('*') // This fetches 'avg_tuition_usd' so we can show it
41
+ .order('rank', { ascending: true, nullsFirst: false })
42
+ .order('university_name', { ascending: true });
43
+
44
+ if (country && country !== "all") query = query.eq('country', country);
45
+ if (search) query = query.ilike('university_name', `%${search}%`);
46
+ if (!country && !search) query = query.limit(100);
47
+
48
+ const { data, error } = await query;
49
+ if (error) return [];
50
+ return data;
51
+ }
52
+
53
+ export default async function UniversityListPage({
54
+ searchParams,
55
+ }: {
56
+ searchParams: Promise<{ country?: string; search?: string }>;
57
+ }) {
58
+ const params = await searchParams;
59
+ const selectedCountry = params.country;
60
+ const searchText = params.search;
61
+
62
+ const [universities, countries] = await Promise.all([
63
+ getUniversities(selectedCountry, searchText),
64
+ getCountries()
65
+ ]);
66
+
67
+ // ✅ Helper to format currency nicely (e.g. 1500 -> $1,500)
68
+ const formatCurrency = (amount: number | null) => {
69
+ if (!amount) return "N/A";
70
+ return new Intl.NumberFormat('en-US', { style: 'currency', currency: 'USD', maximumFractionDigits: 0 }).format(amount);
71
+ };
72
+
73
+ return (
74
+ <div className="p-6 md:p-10 max-w-7xl mx-auto">
75
+ <div className="mb-8">
76
+ <h1 className="text-3xl md:text-4xl font-bold mb-2 text-blue-900">Find Your University</h1>
77
+ <p className="text-gray-600">Compare rankings, tuition, and admissions across 1,800+ institutions.</p>
78
+ </div>
79
+
80
+ <UniversityFilters countries={countries} />
81
+
82
+ <div className="overflow-hidden border border-gray-200 shadow-xl rounded-xl bg-white">
83
+ {universities?.length === 0 ? (
84
+ <div className="text-center py-16 px-6">
85
+ <h3 className="text-xl font-bold text-gray-800 mb-2">No universities found</h3>
86
+ <Link href="/dashboard/university" className="text-blue-600 hover:underline">Clear Filters</Link>
87
+ </div>
88
+ ) : (
89
+ <table className="min-w-full">
90
+ <thead className="bg-blue-600 text-white">
91
+ <tr>
92
+ <th className="py-4 px-6 text-left hidden md:table-cell">Rank</th>
93
+ <th className="py-4 px-6 text-left">University</th>
94
+ {/* 👇 NEW COLUMN: This is what you were missing! */}
95
+ <th className="py-4 px-6 text-left">Est. Annual Fee</th>
96
+ <th className="py-4 px-6 text-left hidden sm:table-cell">Location</th>
97
+ <th className="py-4 px-6 text-left">Action</th>
98
+ </tr>
99
+ </thead>
100
+ <tbody className="divide-y divide-gray-100">
101
+ {universities?.map((uni) => (
102
+ <tr key={uni.id} className="hover:bg-blue-50 transition-colors">
103
+
104
+ {/* RANK */}
105
+ <td className="py-4 px-6 font-bold text-blue-600 hidden md:table-cell">
106
+ {uni.rank === "Unranked" ? <span className="text-gray-400 text-xs">N/A</span> : `#${uni.rank}`}
107
+ </td>
108
+
109
+ {/* UNIVERSITY NAME */}
110
+ <td className="py-4 px-6 font-medium text-gray-900">
111
+ <div className="flex flex-col">
112
+ <span className="text-base">{uni.university_name}</span>
113
+ <span className="md:hidden text-xs text-gray-500">{uni.country}</span>
114
+ </div>
115
+ </td>
116
+
117
+ {/* 👇 NEW FEE DATA: Shows the price nicely formatted */}
118
+ <td className="py-4 px-6">
119
+ <div className="flex flex-col">
120
+ <span className="font-bold text-green-700 text-base">
121
+ {formatCurrency(uni.avg_tuition_usd)}
122
+ </span>
123
+ {uni.avg_tuition_usd && (
124
+ <span className="text-[10px] uppercase tracking-wide text-gray-400 font-semibold">
125
+ Starting from
126
+ </span>
127
+ )}
128
+ </div>
129
+ </td>
130
+
131
+ {/* LOCATION */}
132
+ <td className="py-4 px-6 text-gray-600 hidden sm:table-cell">{uni.country}</td>
133
+
134
+ {/* ACTION */}
135
+ <td className="py-4 px-6">
136
+ <Link
137
+ href={`/dashboard/university/${uni.id}`}
138
+ className="px-4 py-2 bg-blue-100 text-blue-700 rounded-md hover:bg-blue-200 text-sm font-bold"
139
+ >
140
+ View
141
+ </Link>
142
+ </td>
143
+ </tr>
144
+ ))}
145
+ </tbody>
146
+ </table>
147
+ )}
148
+ </div>
149
+ </div>
150
+ );
151
+ }
next/src/app/favicon.ico ADDED
next/src/app/features/page.tsx ADDED
@@ -0,0 +1,237 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card"
2
+ import { Badge } from "@/components/ui/badge"
3
+ import {
4
+ Users,
5
+ FileText,
6
+ Clock,
7
+ Shield,
8
+ Zap,
9
+ Bell,
10
+ Award,
11
+ BrainCircuit,
12
+ GraduationCap,
13
+ Map,
14
+ MessageSquare,
15
+ Search,
16
+ } from "lucide-react"
17
+ import { Navbar } from "@/components/navbar"
18
+ import { Footer } from "@/components/footer"
19
+
20
+ const features = [
21
+ {
22
+ icon: BrainCircuit,
23
+ title: "AI Interest Discovery",
24
+ description:
25
+ "Our core feature uses advanced psychometric testing and Machine Learning to create a unique profile vector, identifying your hidden talents and interests.",
26
+ category: "Recommendation Engine",
27
+ },
28
+ {
29
+ icon: Map,
30
+ title: "4-Year Career Roadmap",
31
+ description:
32
+ "Generates a year-by-year timeline suggesting major subjects, projects, internships, and certifications tailored to your chosen career path.",
33
+ category: "Guidance",
34
+ },
35
+ {
36
+ icon: Search,
37
+ title: "University Finder",
38
+ description:
39
+ "A centralized database allowing you to search and compare universities based on admission criteria, fee structures, and location.",
40
+ category: "Data Management",
41
+ },
42
+ {
43
+ icon: MessageSquare,
44
+ title: "Virtual Assistant",
45
+ description:
46
+ "An always-available NLP chatbot that answers career-related questions, explains complex field differences, and guides you through the platform.",
47
+ category: "Support",
48
+ },
49
+ {
50
+ icon: FileText, // Reusing FileText for "Market Trends" as BarChart was removed from imports to keep it clean, or add BarChart back if needed
51
+ title: "Market Trends Analysis",
52
+ description:
53
+ "Real-time visualization of local and global market demands, average salaries, and future growth scope for recommended careers.",
54
+ category: "Analytics",
55
+ },
56
+ {
57
+ icon: Shield,
58
+ title: "Secure Profile Management",
59
+ description:
60
+ "Enterprise-grade security ensures your psychometric data and personal profile are encrypted and protected from unauthorized access.",
61
+ category: "Security",
62
+ },
63
+ {
64
+ icon: GraduationCap,
65
+ title: "Degree Program Matching",
66
+ description:
67
+ "Automatically matches your interest profile with specific degree programs offered by top universities, ranked by compatibility score.",
68
+ category: "Recommendation Engine",
69
+ },
70
+ {
71
+ icon: FileText,
72
+ title: "Downloadable Reports",
73
+ description:
74
+ "Export your full career profile and 4-year roadmap as a professional PDF document for offline reference or printing.",
75
+ category: "Reporting",
76
+ },
77
+ {
78
+ icon: Bell,
79
+ title: "Deadline Reminders",
80
+ description:
81
+ "Smart notifications alert you about upcoming internship windows, admission deadlines, and critical roadmap milestones.",
82
+ category: "Communication",
83
+ },
84
+ {
85
+ icon: Zap,
86
+ title: "Instant Results",
87
+ description:
88
+ "Receive your personalized career recommendations and university matches within 5 seconds of completing the assessment.",
89
+ category: "Performance",
90
+ },
91
+ {
92
+ icon: Users,
93
+ title: "Supervisor & Admin Portal",
94
+ description:
95
+ "Dedicated interfaces for administrators to verify university data, update market trends, and retrain the AI model.",
96
+ category: "Administration",
97
+ },
98
+ {
99
+ icon: Award,
100
+ title: "Confidence Scoring",
101
+ description:
102
+ "Every recommendation comes with an AI confidence score, ensuring you know exactly how strong the match is before making a decision.",
103
+ category: "Recommendation Engine",
104
+ },
105
+ ]
106
+
107
+ export default function FeaturesPage() {
108
+ return (
109
+ <div className="flex min-h-screen flex-col">
110
+ <Navbar />
111
+ {/* Hero Section */}
112
+ <section className="border-b bg-linear-to-b from-indigo-50 to-background py-20">
113
+ <div className="container mx-auto px-4 sm:px-6 lg:px-8">
114
+ <div className="mx-auto max-w-3xl text-center">
115
+ <Badge className="mb-4 bg-indigo-100 text-indigo-600 hover:bg-indigo-100">AI-Powered Guidance</Badge>
116
+ <h1 className="mb-6 text-balance text-4xl font-bold tracking-tight sm:text-5xl">
117
+ Everything You Need to Find
118
+ <span className="text-indigo-600"> Your Perfect Career</span>
119
+ </h1>
120
+ <p className="text-pretty text-lg text-muted-foreground leading-relaxed">
121
+ From discovering your hidden interests to mapping out your entire 4-year degree journey, Edu Path AI provides the tools you need to succeed.
122
+ </p>
123
+ </div>
124
+ </div>
125
+ </section>
126
+
127
+ {/* Features Grid */}
128
+ <section className="py-20">
129
+ <div className="container mx-auto px-4 sm:px-6 lg:px-8">
130
+ <div className="grid gap-8 md:grid-cols-2 lg:grid-cols-3">
131
+ {features.map((feature, index) => (
132
+ <Card key={index} className="transition-all hover:shadow-lg">
133
+ <CardHeader>
134
+ <div className="mb-4 flex h-12 w-12 items-center justify-center rounded-lg bg-indigo-100">
135
+ <feature.icon className="h-6 w-6 text-indigo-600" />
136
+ </div>
137
+ <Badge variant="outline" className="mb-2 w-fit text-xs">
138
+ {feature.category}
139
+ </Badge>
140
+ <CardTitle className="text-xl">{feature.title}</CardTitle>
141
+ </CardHeader>
142
+ <CardContent>
143
+ <CardDescription className="text-base leading-relaxed">{feature.description}</CardDescription>
144
+ </CardContent>
145
+ </Card>
146
+ ))}
147
+ </div>
148
+ </div>
149
+ </section>
150
+
151
+ {/* Benefits Section */}
152
+ <section className="border-t bg-muted/50 py-20">
153
+ <div className="container mx-auto px-4 sm:px-6 lg:px-8">
154
+ <div className="mx-auto max-w-3xl text-center">
155
+ <h2 className="mb-4 text-balance text-3xl font-bold tracking-tight">Built for Student Success</h2>
156
+ <p className="mb-12 text-pretty text-muted-foreground leading-relaxed">
157
+ Our platform is designed to eliminate confusion and help you make data-driven decisions about your future.
158
+ </p>
159
+ </div>
160
+
161
+ <div className="grid gap-8 md:grid-cols-3">
162
+ <Card>
163
+ <CardHeader>
164
+ <CardTitle className="flex items-center gap-2 text-indigo-600">
165
+ <Clock className="h-5 w-5" />
166
+ Save Time
167
+ </CardTitle>
168
+ </CardHeader>
169
+ <CardContent>
170
+ <p className="text-muted-foreground leading-relaxed">
171
+ Stop spending weeks researching different universities. Get all the data you need in one place, instantly.
172
+ </p>
173
+ </CardContent>
174
+ </Card>
175
+
176
+ <Card>
177
+ <CardHeader>
178
+ <CardTitle className="flex items-center gap-2 text-indigo-600">
179
+ <Shield className="h-5 w-5" />
180
+ Reduce Risk
181
+ </CardTitle>
182
+ </CardHeader>
183
+ <CardContent>
184
+ <p className="text-muted-foreground leading-relaxed">
185
+ Avoid choosing the wrong field due to pressure. Our AI ensures your choice aligns with your actual aptitude.
186
+ </p>
187
+ </CardContent>
188
+ </Card>
189
+
190
+ <Card>
191
+ <CardHeader>
192
+ <CardTitle className="flex items-center gap-2 text-indigo-600">
193
+ <Zap className="h-5 w-5" />
194
+ Stay Focused
195
+ </CardTitle>
196
+ </CardHeader>
197
+ <CardContent>
198
+ <p className="text-muted-foreground leading-relaxed">
199
+ With a clear 4-year roadmap, you'll always know what skills or internships to pursue next.
200
+ </p>
201
+ </CardContent>
202
+ </Card>
203
+ </div>
204
+ </div>
205
+ </section>
206
+
207
+ {/* CTA Section */}
208
+ <section className="py-20">
209
+ <div className="container mx-auto px-4 sm:px-6 lg:px-8">
210
+ <Card className="border-indigo-200 bg-linear-to-br from-indigo-50 to-background">
211
+ <CardHeader className="text-center">
212
+ <CardTitle className="text-3xl">Ready to Find Your Path?</CardTitle>
213
+ <CardDescription className="text-base">
214
+ Join students who are taking control of their future with Edu Path AI.
215
+ </CardDescription>
216
+ </CardHeader>
217
+ <CardContent className="flex flex-col items-center gap-4 sm:flex-row sm:justify-center">
218
+ <a
219
+ href="/login"
220
+ className="inline-flex h-11 items-center justify-center rounded-md bg-indigo-600 px-8 text-sm font-medium text-white shadow transition-colors hover:bg-indigo-700 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-indigo-600"
221
+ >
222
+ Start Free Assessment
223
+ </a>
224
+ <a
225
+ href="/about"
226
+ className="inline-flex h-11 items-center justify-center rounded-md border border-input bg-background px-8 text-sm font-medium shadow-sm transition-colors hover:bg-accent hover:text-accent-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring"
227
+ >
228
+ Learn More
229
+ </a>
230
+ </CardContent>
231
+ </Card>
232
+ </div>
233
+ </section>
234
+ <Footer />
235
+ </div>
236
+ )
237
+ }
next/src/app/globals.css ADDED
@@ -0,0 +1,127 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ @import "tailwindcss";
2
+ @import "tw-animate-css";
3
+
4
+ @custom-variant dark (&:is(.dark *));
5
+
6
+ :root {
7
+ --background: oklch(1 0 0);
8
+ --foreground: oklch(0.145 0 0);
9
+ --card: oklch(1 0 0);
10
+ --card-foreground: oklch(0.145 0 0);
11
+ --popover: oklch(1 0 0);
12
+ --popover-foreground: oklch(0.145 0 0);
13
+ /* Updated to indigo-600 theme color */
14
+ --primary: oklch(0.506 0.133 265.754); /* indigo-600 */
15
+ --primary-foreground: oklch(1 0 0);
16
+ --secondary: oklch(0.961 0.014 265.754); /* indigo-50 */
17
+ --secondary-foreground: oklch(0.145 0 0);
18
+ --muted: oklch(0.97 0 0);
19
+ --muted-foreground: oklch(0.556 0 0);
20
+ --accent: oklch(0.725 0.09 265.754); /* indigo-400 */
21
+ --accent-foreground: oklch(1 0 0);
22
+ --destructive: oklch(0.577 0.245 27.325);
23
+ --destructive-foreground: oklch(1 0 0);
24
+ --border: oklch(0.922 0 0);
25
+ --input: oklch(0.922 0 0);
26
+ --ring: oklch(0.506 0.133 265.754);
27
+ --chart-1: oklch(0.506 0.133 265.754);
28
+ --chart-2: oklch(0.6 0.118 184.704);
29
+ --chart-3: oklch(0.398 0.07 227.392);
30
+ --chart-4: oklch(0.828 0.189 84.429);
31
+ --chart-5: oklch(0.769 0.188 70.08);
32
+ --radius: 0.5rem;
33
+ --sidebar: oklch(0.985 0 0);
34
+ --sidebar-foreground: oklch(0.145 0 0);
35
+ --sidebar-primary: oklch(0.506 0.133 265.754);
36
+ --sidebar-primary-foreground: oklch(1 0 0);
37
+ --sidebar-accent: oklch(0.97 0 0);
38
+ --sidebar-accent-foreground: oklch(0.145 0 0);
39
+ --sidebar-border: oklch(0.922 0 0);
40
+ --sidebar-ring: oklch(0.708 0 0);
41
+ }
42
+
43
+ .dark {
44
+ --background: oklch(0.145 0 0);
45
+ --foreground: oklch(0.985 0 0);
46
+ --card: oklch(0.205 0 0);
47
+ --card-foreground: oklch(0.985 0 0);
48
+ --popover: oklch(0.205 0 0);
49
+ --popover-foreground: oklch(0.985 0 0);
50
+ /* Updated dark mode to complement indigo theme */
51
+ --primary: oklch(0.725 0.09 265.754); /* indigo-400 */
52
+ --primary-foreground: oklch(0.145 0 0);
53
+ --secondary: oklch(0.269 0.03 265.754);
54
+ --secondary-foreground: oklch(0.985 0 0);
55
+ --muted: oklch(0.269 0 0);
56
+ --muted-foreground: oklch(0.708 0 0);
57
+ --accent: oklch(0.506 0.133 265.754);
58
+ --accent-foreground: oklch(1 0 0);
59
+ --destructive: oklch(0.396 0.141 25.723);
60
+ --destructive-foreground: oklch(1 0 0);
61
+ --border: oklch(0.269 0 0);
62
+ --input: oklch(0.269 0 0);
63
+ --ring: oklch(0.725 0.09 265.754);
64
+ --chart-1: oklch(0.725 0.09 265.754);
65
+ --chart-2: oklch(0.696 0.17 162.48);
66
+ --chart-3: oklch(0.769 0.188 70.08);
67
+ --chart-4: oklch(0.627 0.265 303.9);
68
+ --chart-5: oklch(0.645 0.246 16.439);
69
+ --sidebar: oklch(0.205 0 0);
70
+ --sidebar-foreground: oklch(0.985 0 0);
71
+ --sidebar-primary: oklch(0.725 0.09 265.754);
72
+ --sidebar-primary-foreground: oklch(0.985 0 0);
73
+ --sidebar-accent: oklch(0.269 0 0);
74
+ --sidebar-accent-foreground: oklch(0.985 0 0);
75
+ --sidebar-border: oklch(0.269 0 0);
76
+ --sidebar-ring: oklch(0.439 0 0);
77
+ }
78
+
79
+ @theme inline {
80
+ --font-sans: "Inter", "Inter Fallback", system-ui, sans-serif;
81
+ --font-mono: "Geist Mono", "Geist Mono Fallback";
82
+ --color-background: var(--background);
83
+ --color-foreground: var(--foreground);
84
+ --color-card: var(--card);
85
+ --color-card-foreground: var(--card-foreground);
86
+ --color-popover: var(--popover);
87
+ --color-popover-foreground: var(--popover-foreground);
88
+ --color-primary: var(--primary);
89
+ --color-primary-foreground: var(--primary-foreground);
90
+ --color-secondary: var(--secondary);
91
+ --color-secondary-foreground: var(--secondary-foreground);
92
+ --color-muted: var(--muted);
93
+ --color-muted-foreground: var(--muted-foreground);
94
+ --color-accent: var(--accent);
95
+ --color-accent-foreground: var(--accent-foreground);
96
+ --color-destructive: var(--destructive);
97
+ --color-destructive-foreground: var(--destructive-foreground);
98
+ --color-border: var(--border);
99
+ --color-input: var(--input);
100
+ --color-ring: var(--ring);
101
+ --color-chart-1: var(--chart-1);
102
+ --color-chart-2: var(--chart-2);
103
+ --color-chart-3: var(--chart-3);
104
+ --color-chart-4: var(--chart-4);
105
+ --color-chart-5: var(--chart-5);
106
+ --radius-sm: calc(var(--radius) - 4px);
107
+ --radius-md: calc(var(--radius) - 2px);
108
+ --radius-lg: var(--radius);
109
+ --radius-xl: calc(var(--radius) + 4px);
110
+ --color-sidebar: var(--sidebar);
111
+ --color-sidebar-foreground: var(--sidebar-foreground);
112
+ --color-sidebar-primary: var(--sidebar-primary);
113
+ --color-sidebar-primary-foreground: var(--sidebar-primary-foreground);
114
+ --color-sidebar-accent: var(--sidebar-accent);
115
+ --color-sidebar-accent-foreground: var(--sidebar-accent-foreground);
116
+ --color-sidebar-border: var(--sidebar-border);
117
+ --color-sidebar-ring: var(--sidebar-ring);
118
+ }
119
+
120
+ @layer base {
121
+ * {
122
+ @apply border-border outline-ring/50;
123
+ }
124
+ body {
125
+ @apply bg-background text-foreground;
126
+ }
127
+ }
next/src/app/layout.tsx ADDED
@@ -0,0 +1,55 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import type { Metadata } from "next";
2
+ import { Geist, Geist_Mono } from "next/font/google";
3
+ import "./globals.css";
4
+ import { Toaster } from "@/components/ui/sonner"
5
+
6
+ const geistSans = Geist({
7
+ variable: "--font-geist-sans",
8
+ subsets: ["latin"],
9
+ });
10
+
11
+ const geistMono = Geist_Mono({
12
+ variable: "--font-geist-mono",
13
+ subsets: ["latin"],
14
+ });
15
+
16
+ export const metadata: Metadata = {
17
+ title: "Edu Path AI - University Workflow Automation",
18
+ description:
19
+ "Centralized university workflow automation platform for Final Year Project management and Student Degree Clearance.",
20
+ generator: "v0.app",
21
+ icons: {
22
+ icon: [
23
+ {
24
+ url: "/icon-light-32x32.png",
25
+ media: "(prefers-color-scheme: light)",
26
+ },
27
+ {
28
+ url: "/icon-dark-32x32.png",
29
+ media: "(prefers-color-scheme: dark)",
30
+ },
31
+ {
32
+ url: "/icon.svg",
33
+ type: "image/svg+xml",
34
+ },
35
+ ],
36
+ apple: "/apple-icon.png",
37
+ },
38
+ }
39
+
40
+ export default function RootLayout({
41
+ children,
42
+ }: Readonly<{
43
+ children: React.ReactNode;
44
+ }>) {
45
+ return (
46
+ <html lang="en">
47
+ <body
48
+ className={`${geistSans.variable} ${geistMono.variable} antialiased`}
49
+ >
50
+ {children}
51
+ <Toaster />
52
+ </body>
53
+ </html>
54
+ );
55
+ }
next/src/app/login/page.tsx ADDED
@@ -0,0 +1,118 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ "use client"
2
+
3
+ import { useState } from "react"
4
+ import { useRouter } from "next/navigation"
5
+ import { useForm } from "react-hook-form"
6
+ import { zodResolver } from "@hookform/resolvers/zod"
7
+ import { loginSchema, LoginSchema } from "@/lib/validations/login"
8
+ import Link from "next/link"
9
+
10
+ import { Button } from "@/components/ui/button"
11
+ import { Input } from "@/components/ui/input"
12
+ import {
13
+ Form,
14
+ FormControl,
15
+ FormField,
16
+ FormItem,
17
+ FormLabel,
18
+ FormMessage,
19
+ } from "@/components/ui/form"
20
+ import { Card, CardHeader, CardTitle, CardContent, CardDescription, CardFooter } from "@/components/ui/card"
21
+
22
+ export default function LoginPage() {
23
+ const [loading, setLoading] = useState(false)
24
+ const router = useRouter()
25
+
26
+ const form = useForm<LoginSchema>({
27
+ resolver: zodResolver(loginSchema),
28
+ defaultValues: {
29
+ email: "",
30
+ password: "",
31
+ },
32
+ })
33
+
34
+ async function onSubmit(data: LoginSchema) {
35
+ setLoading(true)
36
+ const response = await fetch("/api/auth/login", {
37
+ method: "POST",
38
+ headers: { "Content-Type": "application/json" },
39
+ body: JSON.stringify(data),
40
+ })
41
+
42
+ const result = await response.json()
43
+ setLoading(false)
44
+
45
+ if (!response.ok) {
46
+ alert(result.error)
47
+ return
48
+ }
49
+
50
+ router.push("/dashboard") // Redirect to main app after login
51
+ router.refresh()
52
+ }
53
+
54
+ return (
55
+ <div className="flex min-h-screen flex-col items-center justify-center bg-gray-50 px-4">
56
+ {/* BRANDING */}
57
+ <div className="mb-8 text-center">
58
+ <h1 className="text-3xl font-bold text-indigo-600">EduPath AI</h1>
59
+ <p className="text-sm text-gray-500">Your personalized learning journey</p>
60
+ </div>
61
+
62
+ <Card className="w-full max-w-sm shadow-lg">
63
+ <CardHeader className="space-y-1">
64
+ <CardTitle className="text-2xl font-bold">Sign In</CardTitle>
65
+ <CardDescription>Enter your email and password to access your account.</CardDescription>
66
+ </CardHeader>
67
+ <CardContent>
68
+ <Form {...form}>
69
+ <form onSubmit={form.handleSubmit(onSubmit)} className="space-y-4">
70
+
71
+ <FormField
72
+ control={form.control}
73
+ name="email"
74
+ render={({ field }) => (
75
+ <FormItem>
76
+ <FormLabel>Email</FormLabel>
77
+ <FormControl>
78
+ <Input placeholder=" " {...field} />
79
+ </FormControl>
80
+ <FormMessage />
81
+ </FormItem>
82
+ )}
83
+ />
84
+
85
+ <FormField
86
+ control={form.control}
87
+ name="password"
88
+ render={({ field }) => (
89
+ <FormItem>
90
+ <FormLabel>Password</FormLabel>
91
+ <FormControl>
92
+ <Input type="password" placeholder=" " {...field} />
93
+ </FormControl>
94
+ <FormMessage />
95
+ </FormItem>
96
+ )}
97
+ />
98
+
99
+ <Button type="submit" className="w-full bg-indigo-600 hover:bg-indigo-700" disabled={loading}>
100
+ {loading ? "Signing in..." : "Sign In"}
101
+ </Button>
102
+ </form>
103
+ </Form>
104
+ </CardContent>
105
+
106
+ {/* FOOTER: Link to Register */}
107
+ <CardFooter className="justify-center border-t p-4">
108
+ <p className="text-sm text-gray-600">
109
+ Don't have an account?{" "}
110
+ <Link href="/register" className="font-semibold text-indigo-600 hover:underline">
111
+ Sign up
112
+ </Link>
113
+ </p>
114
+ </CardFooter>
115
+ </Card>
116
+ </div>
117
+ )
118
+ }
next/src/app/page.tsx ADDED
@@ -0,0 +1,194 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import Link from "next/link"
2
+ import { Button } from "@/components/ui/button"
3
+ import { Card, CardDescription, CardHeader, CardTitle } from "@/components/ui/card"
4
+ import { Navbar } from "@/components/navbar"
5
+ import { Footer } from "@/components/footer"
6
+ import { GraduationCap, FileText, Users, CheckCircle2, ArrowRight, Sparkles, Shield, Zap } from "lucide-react"
7
+
8
+ export default function HomePage() {
9
+ return (
10
+ <div className="min-h-screen flex flex-col">
11
+ <Navbar />
12
+
13
+ <main className="flex-1">
14
+ {/* Hero Section */}
15
+ <section className="relative py-20 md:py-32 overflow-hidden">
16
+ <div className="absolute inset-0 bg-linear-to-br from-primary/5 via-transparent to-accent/5" />
17
+ <div className="container mx-auto px-4 sm:px-6 lg:px-8 relative">
18
+ <div className="max-w-4xl mx-auto text-center space-y-8">
19
+ <div className="inline-flex items-center gap-2 px-4 py-2 rounded-full border bg-secondary/50 text-sm font-medium text-primary">
20
+ <Sparkles className="h-4 w-4" />
21
+ <span>AI-Powered Career Guidance</span>
22
+ </div>
23
+ <h1 className="text-4xl md:text-5xl lg:text-6xl font-bold tracking-tight text-balance">
24
+ {"Discover Your Perfect Career Path with "}
25
+ <span className="text-primary">Intelligent AI</span>
26
+ </h1>
27
+ <p className="text-lg md:text-xl text-muted-foreground leading-relaxed text-pretty max-w-2xl mx-auto">
28
+ Stop guessing your future. Our AI recommendation system analyzes your interests through psychometric tests
29
+ to suggest the best degrees and universities for you.
30
+ </p>
31
+ <div className="flex flex-col sm:flex-row gap-4 justify-center">
32
+ <Button size="lg" asChild>
33
+ <Link href="/login">
34
+ Get Started <ArrowRight className="ml-2 h-4 w-4" />
35
+ </Link>
36
+ </Button>
37
+ <Button size="lg" variant="outline" asChild>
38
+ <Link href="/about">Learn More</Link>
39
+ </Button>
40
+ </div>
41
+ </div>
42
+ </div>
43
+ </section>
44
+
45
+ {/* Stats Section */}
46
+ <section className="py-12 bg-card border-y">
47
+ <div className="container mx-auto px-4 sm:px-6 lg:px-8">
48
+ <div className="grid grid-cols-1 md:grid-cols-3 gap-8 text-center">
49
+ <div className="space-y-2">
50
+ <p className="text-4xl font-bold text-primary">85%</p>
51
+ <p className="text-sm text-muted-foreground">Match Accuracy</p>
52
+ </div>
53
+ <div className="space-y-2">
54
+ <p className="text-4xl font-bold text-primary">30+</p>
55
+ <p className="text-sm text-muted-foreground">Career Clusters</p>
56
+ </div>
57
+ <div className="space-y-2">
58
+ <p className="text-4xl font-bold text-primary">100+</p>
59
+ <p className="text-sm text-muted-foreground">Universities Indexed</p>
60
+ </div>
61
+ </div>
62
+ </div>
63
+ </section>
64
+
65
+ {/* Features Section */}
66
+ <section className="py-20 md:py-32">
67
+ <div className="container mx-auto px-4 sm:px-6 lg:px-8">
68
+ <div className="text-center max-w-3xl mx-auto mb-16 space-y-4">
69
+ <h2 className="text-3xl md:text-4xl font-bold text-balance">
70
+ {"Complete Platform for "}
71
+ <span className="text-primary">Future Success</span>
72
+ </h2>
73
+ <p className="text-lg text-muted-foreground leading-relaxed">
74
+ Everything you need to make informed decisions about your education and career in one powerful platform.
75
+ </p>
76
+ </div>
77
+
78
+ <div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6">
79
+ <Card className="border-2 hover:border-primary/50 transition-colors">
80
+ <CardHeader>
81
+ <div className="h-12 w-12 rounded-lg bg-primary/10 flex items-center justify-center mb-4">
82
+ <FileText className="h-6 w-6 text-primary" />
83
+ </div>
84
+ <CardTitle>Psychometric Testing</CardTitle>
85
+ <CardDescription>
86
+ Take our comprehensive test to discover your hidden talents. Our AI analyzes your aptitude and
87
+ interests to generate a unique profile vector for accurate career matching.
88
+ </CardDescription>
89
+ </CardHeader>
90
+ </Card>
91
+
92
+ <Card className="border-2 hover:border-primary/50 transition-colors">
93
+ <CardHeader>
94
+ <div className="h-12 w-12 rounded-lg bg-primary/10 flex items-center justify-center mb-4">
95
+ <CheckCircle2 className="h-6 w-6 text-primary" />
96
+ </div>
97
+ <CardTitle>University Finder</CardTitle>
98
+ <CardDescription>
99
+ Compare admission criteria, fee structures, and course outlines across different universities
100
+ to find the institution that best fits your needs and budget.
101
+ </CardDescription>
102
+ </CardHeader>
103
+ </Card>
104
+
105
+ <Card className="border-2 hover:border-primary/50 transition-colors">
106
+ <CardHeader>
107
+ <div className="h-12 w-12 rounded-lg bg-primary/10 flex items-center justify-center mb-4">
108
+ <Users className="h-6 w-6 text-primary" />
109
+ </div>
110
+ <CardTitle>Virtual Assistant</CardTitle>
111
+ <CardDescription>
112
+ Have questions about a specific field? Our NLP-powered chatbot is available 24/7 to explain
113
+ complex career differences and guide you through the platform.
114
+ </CardDescription>
115
+ </CardHeader>
116
+ </Card>
117
+
118
+ <Card className="border-2 hover:border-primary/50 transition-colors">
119
+ <CardHeader>
120
+ <div className="h-12 w-12 rounded-lg bg-primary/10 flex items-center justify-center mb-4">
121
+ <GraduationCap className="h-6 w-6 text-primary" />
122
+ </div>
123
+ <CardTitle>4-Year Career Roadmap</CardTitle>
124
+ <CardDescription>
125
+ Get a year-by-year plan tailored to your chosen field. We outline major subjects, projects,
126
+ skills, and internships you need to focus on to succeed.
127
+ </CardDescription>
128
+ </CardHeader>
129
+ </Card>
130
+
131
+ <Card className="border-2 hover:border-primary/50 transition-colors">
132
+ <CardHeader>
133
+ <div className="h-12 w-12 rounded-lg bg-primary/10 flex items-center justify-center mb-4">
134
+ <Zap className="h-6 w-6 text-primary" />
135
+ </div>
136
+ <CardTitle>Market Trends</CardTitle>
137
+ <CardDescription>
138
+ Stay ahead of the curve with real-time insights into local and global market demands,
139
+ average salaries, and future growth scope for various careers.
140
+ </CardDescription>
141
+ </CardHeader>
142
+ </Card>
143
+
144
+ <Card className="border-2 hover:border-primary/50 transition-colors">
145
+ <CardHeader>
146
+ <div className="h-12 w-12 rounded-lg bg-primary/10 flex items-center justify-center mb-4">
147
+ <Shield className="h-6 w-6 text-primary" />
148
+ </div>
149
+ <CardTitle>Secure & Private</CardTitle>
150
+ <CardDescription>
151
+ Your personal data and test results are encrypted and stored securely. We prioritize your privacy
152
+ while helping you build your future.
153
+ </CardDescription>
154
+ </CardHeader>
155
+ </Card>
156
+ </div>
157
+ </div>
158
+ </section>
159
+
160
+ {/* CTA Section */}
161
+ <section className="py-20 bg-primary text-primary-foreground">
162
+ <div className="container mx-auto px-4 sm:px-6 lg:px-8">
163
+ <div className="max-w-3xl mx-auto text-center space-y-6">
164
+ <h2 className="text-3xl md:text-4xl font-bold text-balance">
165
+ Ready to Find Your True Calling?
166
+ </h2>
167
+ <p className="text-lg text-primary-foreground/90 leading-relaxed">
168
+ Join thousands of students using Edu Path AI to make data-driven decisions about their education
169
+ and future careers.
170
+ </p>
171
+ <div className="flex flex-col sm:flex-row gap-4 justify-center pt-4">
172
+ <Button size="lg" variant="secondary" asChild>
173
+ <Link href="/login">
174
+ Start Assessment <ArrowRight className="ml-2 h-4 w-4" />
175
+ </Link>
176
+ </Button>
177
+ <Button
178
+ size="lg"
179
+ variant="outline"
180
+ className="bg-transparent border-primary-foreground text-primary-foreground hover:bg-primary-foreground/10"
181
+ asChild
182
+ >
183
+ <Link href="/about">Learn More</Link>
184
+ </Button>
185
+ </div>
186
+ </div>
187
+ </div>
188
+ </section>
189
+ </main>
190
+
191
+ <Footer />
192
+ </div>
193
+ )
194
+ }
next/src/app/register/page.tsx ADDED
@@ -0,0 +1,154 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ "use client"
2
+
3
+ import { useState } from "react"
4
+ import { useRouter } from "next/navigation"
5
+ import { useForm } from "react-hook-form"
6
+ import { zodResolver } from "@hookform/resolvers/zod"
7
+ import { z } from "zod"
8
+ import Link from "next/link"
9
+
10
+ import { Button } from "@/components/ui/button"
11
+ import { Input } from "@/components/ui/input"
12
+ import {
13
+ Form,
14
+ FormControl,
15
+ FormField,
16
+ FormItem,
17
+ FormLabel,
18
+ FormMessage,
19
+ } from "@/components/ui/form"
20
+ import { Card, CardHeader, CardTitle, CardContent, CardDescription, CardFooter } from "@/components/ui/card"
21
+
22
+ // --- 1. DEFINE SCHEMA HERE (Eliminates import errors) ---
23
+ const registerSchema = z.object({
24
+ name: z.string().min(3, { message: "Name must be at least 3 characters." }),
25
+ email: z.string().email({ message: "Please enter a valid email address." }),
26
+ password: z.string().min(6, { message: "Password must be at least 6 characters." }),
27
+ // This is the strict part:
28
+ role: z.enum(["STUDENT", "ADMIN"]),
29
+ })
30
+
31
+ // --- 2. INFER THE TYPE AUTOMATICALLY ---
32
+ type RegisterFormValues = z.infer<typeof registerSchema>
33
+
34
+ export default function RegisterPage() {
35
+ const [loading, setLoading] = useState(false)
36
+ const router = useRouter()
37
+
38
+ // --- 3. THE FIX: Explicitly tell useForm what the type is ---
39
+ const form = useForm<RegisterFormValues>({
40
+ resolver: zodResolver(registerSchema),
41
+ defaultValues: {
42
+ name: "",
43
+ email: "",
44
+ password: "",
45
+ // THE MAGIC FIX: 'as const' tells TS this is the Enum value, not just a string
46
+ role: "STUDENT" as const,
47
+ },
48
+ })
49
+
50
+ async function onSubmit(data: RegisterFormValues) {
51
+ setLoading(true)
52
+
53
+ try {
54
+ const response = await fetch("/api/auth/register", {
55
+ method: "POST",
56
+ headers: { "Content-Type": "application/json" },
57
+ body: JSON.stringify(data),
58
+ })
59
+
60
+ const result = await response.json()
61
+
62
+ if (!response.ok) {
63
+ alert(result.error || "Something went wrong")
64
+ console.log(result)
65
+ return
66
+ }
67
+
68
+ alert("Account created successfully! Please login.")
69
+ router.push("/login")
70
+
71
+ } catch (error) {
72
+ alert("Something went wrong")
73
+ } finally {
74
+ setLoading(false)
75
+ }
76
+ }
77
+
78
+ return (
79
+ <div className="flex min-h-screen flex-col items-center justify-center bg-gray-50 px-4">
80
+ <div className="mb-8 text-center">
81
+ <h1 className="text-3xl font-bold text-indigo-600">EduPath AI</h1>
82
+ <p className="text-sm text-gray-500">Join us to start your career journey</p>
83
+ </div>
84
+
85
+ <Card className="w-full max-w-sm shadow-lg">
86
+ <CardHeader className="space-y-1">
87
+ <CardTitle className="text-2xl font-bold">Create Account</CardTitle>
88
+ <CardDescription>Enter your details below to create your account.</CardDescription>
89
+ </CardHeader>
90
+ <CardContent>
91
+ <Form {...form}>
92
+ <form onSubmit={form.handleSubmit(onSubmit)} className="space-y-4">
93
+
94
+ <FormField
95
+ control={form.control}
96
+ name="name"
97
+ render={({ field }) => (
98
+ <FormItem>
99
+ <FormLabel>Full Name</FormLabel>
100
+ <FormControl>
101
+ <Input placeholder=" " {...field} />
102
+ </FormControl>
103
+ <FormMessage />
104
+ </FormItem>
105
+ )}
106
+ />
107
+
108
+ <FormField
109
+ control={form.control}
110
+ name="email"
111
+ render={({ field }) => (
112
+ <FormItem>
113
+ <FormLabel>Email</FormLabel>
114
+ <FormControl>
115
+ <Input placeholder=" " {...field} />
116
+ </FormControl>
117
+ <FormMessage />
118
+ </FormItem>
119
+ )}
120
+ />
121
+
122
+ <FormField
123
+ control={form.control}
124
+ name="password"
125
+ render={({ field }) => (
126
+ <FormItem>
127
+ <FormLabel>Password</FormLabel>
128
+ <FormControl>
129
+ <Input type="password" placeholder=" " {...field} />
130
+ </FormControl>
131
+ <FormMessage />
132
+ </FormItem>
133
+ )}
134
+ />
135
+
136
+ <Button type="submit" className="w-full bg-indigo-600 hover:bg-indigo-700" disabled={loading}>
137
+ {loading ? "Creating Account..." : "Sign Up"}
138
+ </Button>
139
+ </form>
140
+ </Form>
141
+ </CardContent>
142
+
143
+ <CardFooter className="justify-center border-t p-4">
144
+ <p className="text-sm text-gray-600">
145
+ Already have an account?{" "}
146
+ <Link href="/login" className="font-semibold text-indigo-600 hover:underline">
147
+ Sign in
148
+ </Link>
149
+ </p>
150
+ </CardFooter>
151
+ </Card>
152
+ </div>
153
+ )
154
+ }
next/src/components/CountryFilter.tsx ADDED
@@ -0,0 +1,42 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ "use client"
2
+
3
+ import { useRouter, useSearchParams } from 'next/navigation';
4
+
5
+ export default function CountryFilter({ countries }: { countries: string[] }) {
6
+ const router = useRouter();
7
+ const searchParams = useSearchParams();
8
+ const selectedCountry = searchParams.get('country') || "";
9
+
10
+ const handleChange = (e: React.ChangeEvent<HTMLSelectElement>) => {
11
+ const country = e.target.value;
12
+
13
+ // 👇 CRITICAL CHANGE: Updated paths to /dashboard/university
14
+ if (country === "all") {
15
+ router.push('/dashboard/university');
16
+ } else {
17
+ router.push(`/dashboard/university?country=${country}`);
18
+ }
19
+ };
20
+
21
+ return (
22
+ <div className="mb-8">
23
+ <label className="block text-sm font-medium text-gray-700 mb-2">
24
+ Filter by Country
25
+ </label>
26
+ <div className="relative">
27
+ <select
28
+ value={selectedCountry}
29
+ onChange={handleChange}
30
+ className="block w-full max-w-xs pl-3 pr-10 py-3 text-base border-gray-300 focus:outline-none focus:ring-blue-500 focus:border-blue-500 sm:text-sm rounded-md shadow-sm bg-white text-gray-900 cursor-pointer"
31
+ >
32
+ <option value="all">All Countries</option>
33
+ {countries.map((country) => (
34
+ <option key={country} value={country}>
35
+ {country}
36
+ </option>
37
+ ))}
38
+ </select>
39
+ </div>
40
+ </div>
41
+ );
42
+ }
next/src/components/UniversityCard.tsx ADDED
@@ -0,0 +1,83 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import Link from 'next/link';
2
+
3
+ interface University {
4
+ id: string;
5
+ name: string;
6
+ location: string;
7
+ ranking?: number;
8
+ feeStructure?: number;
9
+ }
10
+
11
+ // Function to generate a consistent color based on the university name
12
+ // This ensures "Harvard" is always the same color on refresh.
13
+ const getGradient = (name: string) => {
14
+ const colors = [
15
+ 'from-blue-500 to-cyan-400',
16
+ 'from-purple-600 to-indigo-500',
17
+ 'from-emerald-500 to-teal-400',
18
+ 'from-orange-500 to-amber-400',
19
+ 'from-rose-500 to-pink-500',
20
+ 'from-slate-700 to-slate-600',
21
+ ];
22
+ let hash = 0;
23
+ for (let i = 0; i < name.length; i++) {
24
+ hash = name.charCodeAt(i) + ((hash << 5) - hash);
25
+ }
26
+ return colors[Math.abs(hash) % colors.length];
27
+ };
28
+
29
+ export default function UniversityCard({ uni }: { uni: University }) {
30
+ const gradient = getGradient(uni.name);
31
+
32
+ return (
33
+ <Link
34
+ href={`/university/${uni.id}`}
35
+ className="group bg-white rounded-xl border border-gray-200 shadow-sm hover:shadow-xl hover:-translate-y-1 transition-all duration-300 overflow-hidden flex flex-col h-full"
36
+ >
37
+ {/* 1. Header with Gradient & Initial (Visual Interest) */}
38
+ <div className={`h-32 bg-linear-to-br ${gradient} p-4 flex items-start justify-between relative`}>
39
+ <div className="bg-white/20 backdrop-blur-sm p-2 rounded-lg text-white">
40
+ {/* Use the first letter as a logo placeholder */}
41
+ <span className="text-2xl font-bold font-serif">{uni.name.charAt(0)}</span>
42
+ </div>
43
+
44
+ {/* Ranking Badge */}
45
+ {uni.ranking && uni.ranking > 0 && (
46
+ <span className="bg-black/30 backdrop-blur-md text-white text-xs font-semibold px-3 py-1 rounded-full border border-white/20">
47
+ #{uni.ranking} Global Rank
48
+ </span>
49
+ )}
50
+ </div>
51
+
52
+ {/* 2. Content Body */}
53
+ <div className="p-5 flex-1 flex flex-col">
54
+ <h3 className="text-xl font-bold text-gray-900 group-hover:text-blue-600 transition-colors line-clamp-2 mb-2">
55
+ {uni.name}
56
+ </h3>
57
+
58
+ <div className="flex items-center text-gray-500 text-sm mb-4">
59
+ <svg className="w-4 h-4 mr-1" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path strokeLinecap="round" strokeLinejoin="round" strokeWidth="2" d="M17.657 16.657L13.414 20.9a1.998 1.998 0 01-2.827 0l-4.244-4.243a8 8 0 1111.314 0z"></path><path strokeLinecap="round" strokeLinejoin="round" strokeWidth="2" d="M15 11a3 3 0 11-6 0 3 3 0 016 0z"></path></svg>
60
+ {uni.location}
61
+ </div>
62
+
63
+ {/* Spacer to push footer down */}
64
+ <div className="flex-1"></div>
65
+
66
+ {/* 3. Footer Stats */}
67
+ <div className="pt-4 border-t border-gray-100 flex items-center justify-between mt-2">
68
+ <div>
69
+ <p className="text-xs text-gray-400 uppercase font-semibold">Tuition</p>
70
+ <p className="text-green-600 font-bold">
71
+ {uni.feeStructure
72
+ ? `$${uni.feeStructure.toLocaleString()}`
73
+ : 'Check website'}
74
+ </p>
75
+ </div>
76
+ <span className="text-blue-600 text-sm font-medium group-hover:translate-x-1 transition-transform flex items-center">
77
+ View <span className="ml-1">→</span>
78
+ </span>
79
+ </div>
80
+ </div>
81
+ </Link>
82
+ );
83
+ }
next/src/components/dashboard-sidebar.tsx ADDED
@@ -0,0 +1,83 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ "use client"
2
+
3
+ import Link from "next/link"
4
+ import { usePathname } from "next/navigation"
5
+ import {
6
+ Home, Info, Sparkles, BookOpen, Mail, User,
7
+ LayoutDashboard, GraduationCap, Map
8
+ } from "lucide-react"
9
+ import {
10
+ Sidebar, SidebarContent, SidebarFooter, SidebarHeader,
11
+ SidebarMenu, SidebarMenuButton, SidebarMenuItem,
12
+ SidebarRail, SidebarGroup, SidebarGroupContent
13
+ } from "@/components/ui/sidebar"
14
+ import { Avatar, AvatarFallback } from "@/components/ui/avatar"
15
+
16
+ // Define Menu Items Globally
17
+ const menuItems = [
18
+ { title: "Dashboard", url: "/dashboard", icon: LayoutDashboard },
19
+ { title: "Universities", url: "/university", icon: GraduationCap },
20
+ { title: "Degree Roadmap", url: "/dashboard/roadmap", icon: Map },
21
+ { title: "Home", url: "/", icon: Home },
22
+ { title: "About", url: "/about-us", icon: Info },
23
+ { title: "Features", url: "/features", icon: Sparkles },
24
+ { title: "Blogs", url: "/blogs", icon: BookOpen },
25
+ { title: "Contact Us", url: "/contact-us", icon: Mail },
26
+ ]
27
+
28
+ export function DashboardSidebar() {
29
+ const pathname = usePathname();
30
+
31
+ return (
32
+ <Sidebar collapsible="icon" className="border-r bg-white">
33
+ <SidebarHeader className="border-b p-4">
34
+ <SidebarMenu>
35
+ <SidebarMenuItem>
36
+ <SidebarMenuButton size="lg">
37
+ <Avatar className="h-8 w-8 rounded-lg border-2 border-indigo-600">
38
+ <AvatarFallback className="bg-indigo-600 text-white">
39
+ <User className="h-4 w-4" />
40
+ </AvatarFallback>
41
+ </Avatar>
42
+ <div className="grid flex-1 text-left text-sm leading-tight">
43
+ <span className="truncate font-semibold">Welcome back!</span>
44
+ <span className="truncate text-xs text-muted-foreground">Student</span>
45
+ </div>
46
+ </SidebarMenuButton>
47
+ </SidebarMenuItem>
48
+ </SidebarMenu>
49
+ </SidebarHeader>
50
+
51
+ <SidebarContent className="p-2">
52
+ <SidebarGroup>
53
+ <SidebarGroupContent>
54
+ <SidebarMenu className="space-y-1">
55
+ {menuItems.map((item) => (
56
+ <SidebarMenuItem key={item.title}>
57
+ <SidebarMenuButton
58
+ asChild
59
+ isActive={pathname === item.url}
60
+ tooltip={item.title}
61
+ className="hover:bg-indigo-50 hover:text-indigo-600 transition-colors data-[active=true]:bg-indigo-50 data-[active=true]:text-indigo-600"
62
+ >
63
+ <Link href={item.url}>
64
+ <item.icon className="h-5 w-5" />
65
+ <span className="font-medium">{item.title}</span>
66
+ </Link>
67
+ </SidebarMenuButton>
68
+ </SidebarMenuItem>
69
+ ))}
70
+ </SidebarMenu>
71
+ </SidebarGroupContent>
72
+ </SidebarGroup>
73
+ </SidebarContent>
74
+
75
+ <SidebarFooter className="border-t p-4">
76
+ <div className="text-center text-xs text-muted-foreground group-data-[collapsible=icon]:hidden">
77
+ © 2025 Edu Path AI
78
+ </div>
79
+ </SidebarFooter>
80
+ <SidebarRail />
81
+ </Sidebar>
82
+ )
83
+ }
next/src/components/footer.tsx ADDED
@@ -0,0 +1,86 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import Link from "next/link"
2
+ import { GraduationCap, Mail, Phone, MapPin } from "lucide-react"
3
+
4
+ export function Footer() {
5
+ return (
6
+ <footer className="border-t bg-card">
7
+ <div className="container mx-auto px-4 sm:px-6 lg:px-8 py-12">
8
+ <div className="grid grid-cols-1 gap-8 md:grid-cols-2 lg:grid-cols-4">
9
+ {/* Brand */}
10
+ <div className="space-y-4">
11
+ <Link href="/" className="flex items-center gap-2 font-semibold text-lg">
12
+ <div className="flex h-10 w-10 items-center justify-center rounded-lg bg-primary">
13
+ <GraduationCap className="h-6 w-6 text-primary-foreground" />
14
+ </div>
15
+ <span>Edu Path AI</span>
16
+ </Link>
17
+ <p className="text-sm text-muted-foreground leading-relaxed">
18
+ Empowering students with AI-driven career guidance and personalized university recommendations for a brighter future.
19
+ </p>
20
+ </div>
21
+
22
+ {/* Quick Links */}
23
+ <div>
24
+ <h3 className="font-semibold mb-4">Quick Links</h3>
25
+ <ul className="space-y-3 text-sm">
26
+ <li>
27
+ <Link href="/" className="text-muted-foreground hover:text-primary transition-colors">
28
+ Home
29
+ </Link>
30
+ </li>
31
+ <li>
32
+ <Link href="/about" className="text-muted-foreground hover:text-primary transition-colors">
33
+ About Us
34
+ </Link>
35
+ </li>
36
+ <li>
37
+ <Link href="/blog" className="text-muted-foreground hover:text-primary transition-colors">
38
+ Career Blog
39
+ </Link>
40
+ </li>
41
+ <li>
42
+ <Link href="/contact" className="text-muted-foreground hover:text-primary transition-colors">
43
+ Contact
44
+ </Link>
45
+ </li>
46
+ </ul>
47
+ </div>
48
+
49
+ {/* Solutions */}
50
+ <div>
51
+ <h3 className="font-semibold mb-4">Our Services</h3>
52
+ <ul className="space-y-3 text-sm">
53
+ <li className="text-muted-foreground">Psychometric Testing</li>
54
+ <li className="text-muted-foreground">University Finder</li>
55
+ <li className="text-muted-foreground">4-Year Roadmap</li>
56
+ <li className="text-muted-foreground">Market Trend Analysis</li>
57
+ </ul>
58
+ </div>
59
+
60
+ {/* Contact Info */}
61
+ <div>
62
+ <h3 className="font-semibold mb-4">Contact Us</h3>
63
+ <ul className="space-y-3 text-sm">
64
+ <li className="flex items-start gap-2 text-muted-foreground">
65
+ <Mail className="h-4 w-4 mt-0.5 shrink-0" />
66
+ <span>support@edupathai.com</span>
67
+ </li>
68
+ <li className="flex items-start gap-2 text-muted-foreground">
69
+ <Phone className="h-4 w-4 mt-0.5 shrink-0" />
70
+ <span>+92 (334) 061-5582</span>
71
+ </li>
72
+ <li className="flex items-start gap-2 text-muted-foreground">
73
+ <MapPin className="h-4 w-4 mt-0.5 shrink-0" />
74
+ <span>Lahore Garrison University, Lahore</span>
75
+ </li>
76
+ </ul>
77
+ </div>
78
+ </div>
79
+
80
+ <div className="mt-12 pt-8 border-t text-center text-sm text-muted-foreground">
81
+ <p>&copy; {new Date().getFullYear()} Edu Path AI. All rights reserved.</p>
82
+ </div>
83
+ </div>
84
+ </footer>
85
+ )
86
+ }
next/src/components/navbar.tsx ADDED
@@ -0,0 +1,91 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ "use client"
2
+
3
+ import Link from "next/link"
4
+ import { usePathname } from "next/navigation"
5
+ import { Button } from "@/components/ui/button"
6
+ import { GraduationCap, Menu, X } from "lucide-react"
7
+ import { useState } from "react"
8
+ import { cn } from "@/lib/utils"
9
+
10
+ export function Navbar() {
11
+ const pathname = usePathname()
12
+ const [mobileMenuOpen, setMobileMenuOpen] = useState(false)
13
+
14
+ const navItems = [
15
+ { href: "/", label: "Home" },
16
+ { href: "/about-us", label: "About" },
17
+ { href: "/features", label: "Features" },
18
+ { href: "/blogs", label: "Blog" },
19
+ { href: "/contact-us", label: "Contact" },
20
+ ]
21
+
22
+ return (
23
+ <nav className="sticky top-0 z-50 border-b bg-background/95 backdrop-blur supports-backdrop-filter:bg-background/60">
24
+ <div className="container mx-auto px-4 sm:px-6 lg:px-8">
25
+ <div className="flex h-16 items-center justify-between">
26
+ {/* Logo */}
27
+ <Link href="/" className="flex items-center gap-2 font-semibold text-lg">
28
+ <div className="flex h-10 w-10 items-center justify-center rounded-lg bg-primary">
29
+ <GraduationCap className="h-6 w-6 text-primary-foreground" />
30
+ </div>
31
+ <span className="text-foreground">Edu Path AI</span>
32
+ </Link>
33
+
34
+ {/* Desktop Navigation */}
35
+ <div className="hidden md:flex md:items-center md:gap-8">
36
+ {navItems.map((item) => (
37
+ <Link
38
+ key={item.href}
39
+ href={item.href}
40
+ className={cn(
41
+ "text-sm font-medium transition-colors hover:text-primary",
42
+ pathname === item.href ? "text-primary" : "text-muted-foreground",
43
+ )}
44
+ >
45
+ {item.label}
46
+ </Link>
47
+ ))}
48
+ </div>
49
+
50
+ {/* CTA Button */}
51
+ <div className="hidden md:block">
52
+ <Button asChild>
53
+ <Link href="/login">Get Started</Link>
54
+ </Button>
55
+ </div>
56
+
57
+ {/* Mobile Menu Button */}
58
+ <button className="md:hidden" onClick={() => setMobileMenuOpen(!mobileMenuOpen)} aria-label="Toggle menu">
59
+ {mobileMenuOpen ? <X className="h-6 w-6" /> : <Menu className="h-6 w-6" />}
60
+ </button>
61
+ </div>
62
+
63
+ {/* Mobile Navigation */}
64
+ {mobileMenuOpen && (
65
+ <div className="border-t py-4 md:hidden">
66
+ <div className="flex flex-col gap-4">
67
+ {navItems.map((item) => (
68
+ <Link
69
+ key={item.href}
70
+ href={item.href}
71
+ onClick={() => setMobileMenuOpen(false)}
72
+ className={cn(
73
+ "text-sm font-medium transition-colors hover:text-primary",
74
+ pathname === item.href ? "text-primary" : "text-muted-foreground",
75
+ )}
76
+ >
77
+ {item.label}
78
+ </Link>
79
+ ))}
80
+ <Button asChild className="w-full">
81
+ <Link href="/login" onClick={() => setMobileMenuOpen(false)}>
82
+ Get Started
83
+ </Link>
84
+ </Button>
85
+ </div>
86
+ </div>
87
+ )}
88
+ </div>
89
+ </nav>
90
+ )
91
+ }
next/src/components/ui/avatar.tsx ADDED
@@ -0,0 +1,53 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ "use client"
2
+
3
+ import * as React from "react"
4
+ import * as AvatarPrimitive from "@radix-ui/react-avatar"
5
+
6
+ import { cn } from "@/lib/utils"
7
+
8
+ function Avatar({
9
+ className,
10
+ ...props
11
+ }: React.ComponentProps<typeof AvatarPrimitive.Root>) {
12
+ return (
13
+ <AvatarPrimitive.Root
14
+ data-slot="avatar"
15
+ className={cn(
16
+ "relative flex size-8 shrink-0 overflow-hidden rounded-full",
17
+ className
18
+ )}
19
+ {...props}
20
+ />
21
+ )
22
+ }
23
+
24
+ function AvatarImage({
25
+ className,
26
+ ...props
27
+ }: React.ComponentProps<typeof AvatarPrimitive.Image>) {
28
+ return (
29
+ <AvatarPrimitive.Image
30
+ data-slot="avatar-image"
31
+ className={cn("aspect-square size-full", className)}
32
+ {...props}
33
+ />
34
+ )
35
+ }
36
+
37
+ function AvatarFallback({
38
+ className,
39
+ ...props
40
+ }: React.ComponentProps<typeof AvatarPrimitive.Fallback>) {
41
+ return (
42
+ <AvatarPrimitive.Fallback
43
+ data-slot="avatar-fallback"
44
+ className={cn(
45
+ "bg-muted flex size-full items-center justify-center rounded-full",
46
+ className
47
+ )}
48
+ {...props}
49
+ />
50
+ )
51
+ }
52
+
53
+ export { Avatar, AvatarImage, AvatarFallback }
next/src/components/ui/badge.tsx ADDED
@@ -0,0 +1,46 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import * as React from "react"
2
+ import { Slot } from "@radix-ui/react-slot"
3
+ import { cva, type VariantProps } from "class-variance-authority"
4
+
5
+ import { cn } from "@/lib/utils"
6
+
7
+ const badgeVariants = cva(
8
+ "inline-flex items-center justify-center rounded-full border px-2 py-0.5 text-xs font-medium w-fit whitespace-nowrap shrink-0 [&>svg]:size-3 gap-1 [&>svg]:pointer-events-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive transition-[color,box-shadow] overflow-hidden",
9
+ {
10
+ variants: {
11
+ variant: {
12
+ default:
13
+ "border-transparent bg-primary text-primary-foreground [a&]:hover:bg-primary/90",
14
+ secondary:
15
+ "border-transparent bg-secondary text-secondary-foreground [a&]:hover:bg-secondary/90",
16
+ destructive:
17
+ "border-transparent bg-destructive text-white [a&]:hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60",
18
+ outline:
19
+ "text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground",
20
+ },
21
+ },
22
+ defaultVariants: {
23
+ variant: "default",
24
+ },
25
+ }
26
+ )
27
+
28
+ function Badge({
29
+ className,
30
+ variant,
31
+ asChild = false,
32
+ ...props
33
+ }: React.ComponentProps<"span"> &
34
+ VariantProps<typeof badgeVariants> & { asChild?: boolean }) {
35
+ const Comp = asChild ? Slot : "span"
36
+
37
+ return (
38
+ <Comp
39
+ data-slot="badge"
40
+ className={cn(badgeVariants({ variant }), className)}
41
+ {...props}
42
+ />
43
+ )
44
+ }
45
+
46
+ export { Badge, badgeVariants }