From 27999a5beaa223c6b3e3bd2e809f2a447953dd28 Mon Sep 17 00:00:00 2001 From: Amudieshwar A G Date: Tue, 21 Jul 2026 14:04:30 +0530 Subject: [PATCH 1/6] feat: scaffold centralized Spring Boot backend project --- backend/pom.xml | 90 +++++++++++++++++++ .../com/rit/portal/PortalApplication.java | 13 +++ .../java/com/rit/portal/config/WebConfig.java | 18 ++++ .../src/main/resources/application.properties | 13 +++ 4 files changed, 134 insertions(+) create mode 100644 backend/pom.xml create mode 100644 backend/src/main/java/com/rit/portal/PortalApplication.java create mode 100644 backend/src/main/java/com/rit/portal/config/WebConfig.java create mode 100644 backend/src/main/resources/application.properties diff --git a/backend/pom.xml b/backend/pom.xml new file mode 100644 index 0000000..1576d4b --- /dev/null +++ b/backend/pom.xml @@ -0,0 +1,90 @@ + + + 4.0.0 + + org.springframework.boot + spring-boot-starter-parent + 3.4.1 + + + com.rit + portal + 0.0.1-SNAPSHOT + Freshers Hub Backend + Centralized Spring Boot backend for RIT Freshers Hub + + + + + + + + + + + + + + + 21 + + + + + org.springframework.boot + spring-boot-starter-web + + + + + org.springframework.boot + spring-boot-starter-data-jpa + + + + + org.postgresql + postgresql + runtime + + + + + org.projectlombok + lombok + true + + + + + org.springframework.boot + spring-boot-starter-validation + + + + + org.springframework.boot + spring-boot-starter-test + test + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + org.projectlombok + lombok + + + + + + + + diff --git a/backend/src/main/java/com/rit/portal/PortalApplication.java b/backend/src/main/java/com/rit/portal/PortalApplication.java new file mode 100644 index 0000000..30b334c --- /dev/null +++ b/backend/src/main/java/com/rit/portal/PortalApplication.java @@ -0,0 +1,13 @@ +package com.rit.portal; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class PortalApplication { + + public static void main(String[] args) { + SpringApplication.run(PortalApplication.class, args); + } + +} diff --git a/backend/src/main/java/com/rit/portal/config/WebConfig.java b/backend/src/main/java/com/rit/portal/config/WebConfig.java new file mode 100644 index 0000000..680bdc3 --- /dev/null +++ b/backend/src/main/java/com/rit/portal/config/WebConfig.java @@ -0,0 +1,18 @@ +package com.rit.portal.config; + +import org.springframework.context.annotation.Configuration; +import org.springframework.web.servlet.config.annotation.CorsRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; + +@Configuration +public class WebConfig implements WebMvcConfigurer { + + @Override + public void addCorsMappings(CorsRegistry registry) { + registry.addMapping("/api/**") + .allowedOrigins("http://localhost:5173", "http://localhost:3000") + .allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS") + .allowedHeaders("*") + .allowCredentials(true); + } +} diff --git a/backend/src/main/resources/application.properties b/backend/src/main/resources/application.properties new file mode 100644 index 0000000..2599148 --- /dev/null +++ b/backend/src/main/resources/application.properties @@ -0,0 +1,13 @@ +# ─── DATABASE CONNECTION CONFIGURATION ─── +spring.datasource.url=jdbc:postgresql://localhost:5432/rit_freshers_hub?sslmode=disable +spring.datasource.username=postgres +spring.datasource.password=your_local_postgres_password_here + +# ─── JPA / HIBERNATE SETTINGS ─── +spring.jpa.database-platform=org.hibernate.dialect.PostgreSQLDialect +spring.jpa.hibernate.ddl-auto=validate +spring.jpa.show-sql=true +spring.jpa.properties.hibernate.format_sql=true + +# ─── SERVER PORT ─── +server.port=8080 From 4f433f4dba3450ce077c3233e7c0b08cb041a098 Mon Sep 17 00:00:00 2001 From: Amudieshwar A G Date: Tue, 21 Jul 2026 14:30:52 +0530 Subject: [PATCH 2/6] feat: implement database entities, repository, controllers, and data seeder for Notes & PYQs module --- backend/.vscode/settings.json | 3 + .../rit/portal/config/DataInitializer.java | 113 ++++++++++++++++++ .../portal/controller/NotePyqController.java | 52 ++++++++ .../java/com/rit/portal/entity/NotePyq.java | 46 +++++++ .../portal/repository/NotePyqRepository.java | 13 ++ .../src/main/resources/application.properties | 2 +- backend/target/classes/application.properties | 13 ++ .../com/rit/portal/PortalApplication.class | Bin 0 -> 735 bytes .../rit/portal/config/DataInitializer.class | Bin 0 -> 3625 bytes .../com/rit/portal/config/WebConfig.class | Bin 0 -> 1501 bytes .../portal/controller/NotePyqController.class | Bin 0 -> 4389 bytes .../entity/NotePyq$NotePyqBuilder.class | Bin 0 -> 3597 bytes .../com/rit/portal/entity/NotePyq.class | Bin 0 -> 4378 bytes .../portal/repository/NotePyqRepository.class | Bin 0 -> 845 bytes 14 files changed, 241 insertions(+), 1 deletion(-) create mode 100644 backend/.vscode/settings.json create mode 100644 backend/src/main/java/com/rit/portal/config/DataInitializer.java create mode 100644 backend/src/main/java/com/rit/portal/controller/NotePyqController.java create mode 100644 backend/src/main/java/com/rit/portal/entity/NotePyq.java create mode 100644 backend/src/main/java/com/rit/portal/repository/NotePyqRepository.java create mode 100644 backend/target/classes/application.properties create mode 100644 backend/target/classes/com/rit/portal/PortalApplication.class create mode 100644 backend/target/classes/com/rit/portal/config/DataInitializer.class create mode 100644 backend/target/classes/com/rit/portal/config/WebConfig.class create mode 100644 backend/target/classes/com/rit/portal/controller/NotePyqController.class create mode 100644 backend/target/classes/com/rit/portal/entity/NotePyq$NotePyqBuilder.class create mode 100644 backend/target/classes/com/rit/portal/entity/NotePyq.class create mode 100644 backend/target/classes/com/rit/portal/repository/NotePyqRepository.class diff --git a/backend/.vscode/settings.json b/backend/.vscode/settings.json new file mode 100644 index 0000000..7b016a8 --- /dev/null +++ b/backend/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "java.compile.nullAnalysis.mode": "automatic" +} \ No newline at end of file diff --git a/backend/src/main/java/com/rit/portal/config/DataInitializer.java b/backend/src/main/java/com/rit/portal/config/DataInitializer.java new file mode 100644 index 0000000..844a3f0 --- /dev/null +++ b/backend/src/main/java/com/rit/portal/config/DataInitializer.java @@ -0,0 +1,113 @@ +package com.rit.portal.config; + +import com.rit.portal.entity.NotePyq; +import com.rit.portal.repository.NotePyqRepository; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.CommandLineRunner; +import org.springframework.stereotype.Component; +import java.time.LocalDateTime; +import java.util.Arrays; + +@Component +public class DataInitializer implements CommandLineRunner { + + @Autowired + private NotePyqRepository noteRepository; + + @Override + public void run(String... args) throws Exception { + if (noteRepository.count() == 0) { + noteRepository.saveAll(Arrays.asList( + NotePyq.builder() + .title("Engineering Mathematics – Unit 1-5") + .subject("Mathematics") + .department("Computer Science & Engineering") + .semester(1) + .fileType("notes") + .downloadUrl("#") + .fileSize("4.2 MB") + .downloadsCount(348) + .uploadedAt(LocalDateTime.now()) + .build(), + NotePyq.builder() + .title("Physics PYQ 2020-2024") + .subject("Physics") + .department("Computer Science & Engineering") + .semester(1) + .fileType("pyq") + .downloadUrl("#") + .fileSize("8.1 MB") + .downloadsCount(512) + .uploadedAt(LocalDateTime.now()) + .build(), + NotePyq.builder() + .title("C Programming Complete Notes") + .subject("Programming") + .department("Computer Science & Engineering") + .semester(1) + .fileType("notes") + .downloadUrl("#") + .fileSize("6.3 MB") + .downloadsCount(734) + .uploadedAt(LocalDateTime.now()) + .build(), + NotePyq.builder() + .title("Data Structures PYQ 2019-2024") + .subject("Data Structures") + .department("Computer Science & Engineering") + .semester(3) + .fileType("pyq") + .downloadUrl("#") + .fileSize("10.2 MB") + .downloadsCount(621) + .uploadedAt(LocalDateTime.now()) + .build(), + NotePyq.builder() + .title("Circuit Theory Full Notes") + .subject("Circuit Theory") + .department("Electronics & Communication") + .semester(2) + .fileType("notes") + .downloadUrl("#") + .fileSize("5.7 MB") + .downloadsCount(289) + .uploadedAt(LocalDateTime.now()) + .build(), + NotePyq.builder() + .title("Anna University Syllabus 2021") + .subject("Syllabus") + .department("All Departments") + .semester(1) + .fileType("syllabus") + .downloadUrl("#") + .fileSize("2.1 MB") + .downloadsCount(890) + .uploadedAt(LocalDateTime.now()) + .build(), + NotePyq.builder() + .title("Thermodynamics Notes") + .subject("Thermodynamics") + .department("Mechanical Engineering") + .semester(3) + .fileType("notes") + .downloadUrl("#") + .fileSize("3.9 MB") + .downloadsCount(201) + .uploadedAt(LocalDateTime.now()) + .build(), + NotePyq.builder() + .title("Digital Electronics PYQ") + .subject("Digital Electronics") + .department("Electronics & Communication") + .semester(4) + .fileType("pyq") + .downloadUrl("#") + .fileSize("7.3 MB") + .downloadsCount(445) + .uploadedAt(LocalDateTime.now()) + .build() + )); + System.out.println("🌱 Database successfully seeded with Notes & PYQs test data!"); + } + } +} diff --git a/backend/src/main/java/com/rit/portal/controller/NotePyqController.java b/backend/src/main/java/com/rit/portal/controller/NotePyqController.java new file mode 100644 index 0000000..ebdad65 --- /dev/null +++ b/backend/src/main/java/com/rit/portal/controller/NotePyqController.java @@ -0,0 +1,52 @@ +package com.rit.portal.controller; + +import com.rit.portal.entity.NotePyq; +import com.rit.portal.repository.NotePyqRepository; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; +import java.util.List; + +@RestController +@RequestMapping("/api/notes") +@CrossOrigin(origins = "*") // CrossOrigin configured globally, but added here for safety +public class NotePyqController { + + @Autowired + private NotePyqRepository noteRepository; + + // Get all notes + @GetMapping + public List getAllNotes() { + return noteRepository.findAll(); + } + + // Get notes by semester + @GetMapping("/semester/{semester}") + public List getNotesBySemester(@PathVariable Integer semester) { + return noteRepository.findBySemester(semester); + } + + // Get notes by department + @GetMapping("/department") + public List getNotesByDepartment(@RequestParam String dept) { + return noteRepository.findByDepartment(dept); + } + + // Add a new note metadata + @PostMapping + public NotePyq createNote(@RequestBody NotePyq note) { + return noteRepository.save(note); + } + + // Increment downloads count + @PostMapping("/{id}/download") + public ResponseEntity incrementDownloads(@PathVariable Long id) { + return noteRepository.findById(id).map(note -> { + note.setDownloadsCount(note.getDownloadsCount() + 1); + note.setFileType(note.getFileType()); // Keep dirty check + noteRepository.save(note); + return ResponseEntity.ok().build(); + }).orElse(ResponseEntity.notFound().build()); + } +} diff --git a/backend/src/main/java/com/rit/portal/entity/NotePyq.java b/backend/src/main/java/com/rit/portal/entity/NotePyq.java new file mode 100644 index 0000000..d71892b --- /dev/null +++ b/backend/src/main/java/com/rit/portal/entity/NotePyq.java @@ -0,0 +1,46 @@ +package com.rit.portal.entity; + +import jakarta.persistence.*; +import lombok.*; +import java.time.LocalDateTime; + +@Entity +@Table(name = "notes_pyqs") +@Getter +@Setter +@NoArgsConstructor +@AllArgsConstructor +@Builder +public class NotePyq { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @Column(nullable = false) + private String title; + + @Column(nullable = false) + private String subject; + + @Column(nullable = false) + private String department; + + @Column(nullable = false) + private Integer semester; + + @Column(name = "file_type", nullable = false) + private String fileType; // 'notes', 'pyq', 'syllabus', 'assignment' + + @Column(name = "download_url", nullable = false) + private String downloadUrl; + + @Column(name = "file_size", nullable = false) + private String fileSize; + + @Column(name = "downloads_count") + private Integer downloadsCount = 0; + + @Column(name = "uploaded_at") + private LocalDateTime uploadedAt = LocalDateTime.now(); +} diff --git a/backend/src/main/java/com/rit/portal/repository/NotePyqRepository.java b/backend/src/main/java/com/rit/portal/repository/NotePyqRepository.java new file mode 100644 index 0000000..6a9fd1d --- /dev/null +++ b/backend/src/main/java/com/rit/portal/repository/NotePyqRepository.java @@ -0,0 +1,13 @@ +package com.rit.portal.repository; + +import com.rit.portal.entity.NotePyq; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; +import java.util.List; + +@Repository +public interface NotePyqRepository extends JpaRepository { + List findBySemester(Integer semester); + List findByDepartment(String department); + List findByFileType(String fileType); +} diff --git a/backend/src/main/resources/application.properties b/backend/src/main/resources/application.properties index 2599148..c24917f 100644 --- a/backend/src/main/resources/application.properties +++ b/backend/src/main/resources/application.properties @@ -1,7 +1,7 @@ # ─── DATABASE CONNECTION CONFIGURATION ─── spring.datasource.url=jdbc:postgresql://localhost:5432/rit_freshers_hub?sslmode=disable spring.datasource.username=postgres -spring.datasource.password=your_local_postgres_password_here +spring.datasource.password=Amudiesh22@. # ─── JPA / HIBERNATE SETTINGS ─── spring.jpa.database-platform=org.hibernate.dialect.PostgreSQLDialect diff --git a/backend/target/classes/application.properties b/backend/target/classes/application.properties new file mode 100644 index 0000000..c24917f --- /dev/null +++ b/backend/target/classes/application.properties @@ -0,0 +1,13 @@ +# ─── DATABASE CONNECTION CONFIGURATION ─── +spring.datasource.url=jdbc:postgresql://localhost:5432/rit_freshers_hub?sslmode=disable +spring.datasource.username=postgres +spring.datasource.password=Amudiesh22@. + +# ─── JPA / HIBERNATE SETTINGS ─── +spring.jpa.database-platform=org.hibernate.dialect.PostgreSQLDialect +spring.jpa.hibernate.ddl-auto=validate +spring.jpa.show-sql=true +spring.jpa.properties.hibernate.format_sql=true + +# ─── SERVER PORT ─── +server.port=8080 diff --git a/backend/target/classes/com/rit/portal/PortalApplication.class b/backend/target/classes/com/rit/portal/PortalApplication.class new file mode 100644 index 0000000000000000000000000000000000000000..9bc3c4044977df7cf64c21c1775dfaa5005f45cd GIT binary patch literal 735 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 literal 0 HcmV?d00001 diff --git a/backend/target/classes/com/rit/portal/entity/NotePyq$NotePyqBuilder.class b/backend/target/classes/com/rit/portal/entity/NotePyq$NotePyqBuilder.class new file mode 100644 index 0000000000000000000000000000000000000000..5ba61c204eb3ad837cc92923f62b7f7cd8491fed GIT binary patch literal 3597 zcmd6pZC4vb6vzJ)9umUx6si?#AFyB{MS@jSNU4QX3Yr2IN^PqzmShTBHal^5f(O5a z@BA2gPCfP1bNbrjhw^x5XJR&N4hg*S#bjsh%>3@my>su)-~YUR17I27Cy`*7DTzwX zcVwam(CKqMKp(g?(h_T-)2vZSK9`CCQL*$|Nr~ zCW^w_&of+lSR-78uX{&M;Ox14+4F?7r6at6AyafkWltRD?sJd(w&Z2n(nIQ9t|l9_ zZRtB9FB#N~#&nriZC_UCxD2U)S9l<~&oCO&RIc*1eA`jOgCS7BU!QST}lGxb+;`KeaH53-pBdRJ1UR zPql&MlUQW9e5$|GSio)dkd_$UM9ma>I^ucbnKMf2#y;b=xUyzYD}z#Kq@>V087`1< zViBIEv{Xo9r76ki9Tx84ONQi;?bi6_b9zNlW9USbZ-LBEuDfqx4eJaSEA}BT2(M(z z$BsOpULb8x(i{IP3X5Ove=2ElT}oTqqUM+QDrGzd%jEA_WookOiV!l8zFpN}9;C5> ztt2)XCK}Fgyd!bQbNbTST&s3T3jbKy@f(I;qSi92HE_-L$}SHkib5RLs`A$%(bw@sE#Qos@te1;e;tD zs$Z`i;i^XQs86Zt5uMWILrEI-V~I_ZFV;OOa|PE90!~kEu=!|7e9JHyb3!Y#Ch?Tv z%IQm~Drp~3&}~p{ToZxBI3>m|iib23D%;a2Nh9@5(Kn&;b4*5=Iwqr>9g|Vsjmanj z$7Ga?V=~IhF&X9On2fUP3E2Rhn`$hbJ$jRiB+b!EM&F+7E4=etc)fS&S6vnuz$N;% z^a8wx%QT|AjVolHlb}4o6EvU9-uxX`v%gX|fs-h80$O5Fs;BKcPSPGl9wvSt-fzdh z-Z5YM%JBO_et&!ZWXF8%cf;=w`Br=WjgI;H4H>>F(Tuz@-OfJQj`{jM8va1YA8LR8 znU4ATZ5#ej$RBRcpY52h@T iBuh~=J*2jcM>NXN2^sy3+@%ck7*FsFWB4xIx$rNek=+FV literal 0 HcmV?d00001 diff --git a/backend/target/classes/com/rit/portal/entity/NotePyq.class b/backend/target/classes/com/rit/portal/entity/NotePyq.class new file mode 100644 index 0000000000000000000000000000000000000000..16b04ad31b0cd38b5d54caec1c22651a12004435 GIT binary patch literal 4378 zcmb7H3sclq6h484g=|D#qFc1q)>ep*)xK=;(IO~ax(g^Pt@c5~?iHiiWKFU-^jEbr z-O;f#{(%0G{)^!;_Dz4kwC4C?WB)~-ate(iU#b}_FGb;ynJ`9R<1o#XbAhVghG=suQz?ylzyL1bYRJ`+D)4c+ilA-u%SUj zjugs!?Jy8(L$t7`Cc?)4iKf85T!p4$R?0Sf7B1sFF)hKaDU`E~CLW_q+4d!=&~RSb zmSZ#?x|Tv(wAya-QmSs6zjt*!`92m&c}osLuh8)>VY?ns)OL$OMPm`{V&E6&s8n(4 zhP8}<*06$ig-CGQfMkBBZCVZ9%hkF0$~&v%d{`}a0u4aThILT3_Yx{$vSK;S9p`ze zn_;NrmYjyj)0{$=j$%xu3#4mwkuE7TeABc||F%MdbMspWMa8tmTD!R;+!`m3bI)7e zGF+3_A#rF|_+^yyB(`~|phuDGPc<5%Vfg1iHBrT9-yI50GVp3atxX?*46BVnztZR! zjVYu;b~C6YCg0F#lF7$FUhWnab8c%i#hd~wbgS&d0sN@WSpJSi({v(`zZVuA)9-3D z!#HDXp;vCq`c9)_WP(+=*qHvkMzc(xh^YkC#@scH&afeN`C+WkW+T@UN{#g%Xmpl7 zKwEl2^rz+y2cJ_oUKRdRr?FwU=oT~<5`ZR)!h0gF6GoS{REUI8g=1LsVu^?_vm3#g zI7Adc#$d51a0nNJ^upC+2OT*PV@Hk1cH;p#9a>6=$NZK`gQTm}peK1kolf-XF!V{I zU3!Y9+~ZNW{zRdfxpKT*BiB`WMpmAlD|Av~^jp)YNgHSp+j*(b+xYh743A|YjOY<5 zktat~>o;}~sDC3jWU4ovwp$mRDU8f;4qf4`E0jFc@5%#?XB0f_Kab>409VDyCA{s{ z{tMKcR<>~zEm?-=2`tAB&O21Y8peKA@TBqR9IBho36%zTa$uFmY67bfJh}E&K?Tx4 zzzhi41w4=AH~v^kVhSWPFa(kr==Nj=+C5~9<9QrbPkMAJGK7xr=e`$l(f9q_(-9Ya zA95q_f&4xUpt1WI=jbFh{~>(@f%6Ci2j*iuKf!MfH2xd;n=U+hMe~2)eSj|GKT8qf zbVXA5>@CsN1cVYeEIFkAMb{3ik4kkd5TMWKa|kN*1$~(UbUho;*Qr1Y*??}Q0^Q06 z^bLKRvbDu*Kuf6}EoTF|mkP9!4XB(7w3-d5k{Y9GHlTIdND21+Y(Se-!{9jF8w&vE z?ikiDcIeulvJZNlp~}*p2_(YO=B^0_&qMAAoUz2MzePW!!C%h`9}KP#{+NXSF&%y( zD||5iLikAu|0o^)R#y06h=%Y}68}_?qe+s_L)F>`=_uB;_Dez<(Y0fy=n!7h*@%boZ#bNOr;& z{)LSK^s5Orji+XXmL(6(G-=P(~IMSh2y*SF=71adi zw3u_6bgmT`?GBr2IBejEywLEls`7UXT;@0KHr{5Hzepg Date: Tue, 21 Jul 2026 14:31:30 +0530 Subject: [PATCH 3/6] chore: add backend gitignore and remove target class files from git --- backend/.gitignore | 9 +++++++++ backend/target/classes/application.properties | 13 ------------- .../com/rit/portal/PortalApplication.class | Bin 735 -> 0 bytes .../com/rit/portal/config/DataInitializer.class | Bin 3625 -> 0 bytes .../com/rit/portal/config/WebConfig.class | Bin 1501 -> 0 bytes .../portal/controller/NotePyqController.class | Bin 4389 -> 0 bytes .../portal/entity/NotePyq$NotePyqBuilder.class | Bin 3597 -> 0 bytes .../classes/com/rit/portal/entity/NotePyq.class | Bin 4378 -> 0 bytes .../portal/repository/NotePyqRepository.class | Bin 845 -> 0 bytes 9 files changed, 9 insertions(+), 13 deletions(-) create mode 100644 backend/.gitignore delete mode 100644 backend/target/classes/application.properties delete mode 100644 backend/target/classes/com/rit/portal/PortalApplication.class delete mode 100644 backend/target/classes/com/rit/portal/config/DataInitializer.class delete mode 100644 backend/target/classes/com/rit/portal/config/WebConfig.class delete mode 100644 backend/target/classes/com/rit/portal/controller/NotePyqController.class delete mode 100644 backend/target/classes/com/rit/portal/entity/NotePyq$NotePyqBuilder.class delete mode 100644 backend/target/classes/com/rit/portal/entity/NotePyq.class delete mode 100644 backend/target/classes/com/rit/portal/repository/NotePyqRepository.class diff --git a/backend/.gitignore b/backend/.gitignore new file mode 100644 index 0000000..a020ab3 --- /dev/null +++ b/backend/.gitignore @@ -0,0 +1,9 @@ +/target/ +/.settings/ +/.classpath +/.project +/.metadata/ +/bin/ +*.class +.factorypath +.springBeans diff --git a/backend/target/classes/application.properties b/backend/target/classes/application.properties deleted file mode 100644 index c24917f..0000000 --- a/backend/target/classes/application.properties +++ /dev/null @@ -1,13 +0,0 @@ -# ─── DATABASE CONNECTION CONFIGURATION ─── -spring.datasource.url=jdbc:postgresql://localhost:5432/rit_freshers_hub?sslmode=disable -spring.datasource.username=postgres -spring.datasource.password=Amudiesh22@. - -# ─── JPA / HIBERNATE SETTINGS ─── -spring.jpa.database-platform=org.hibernate.dialect.PostgreSQLDialect -spring.jpa.hibernate.ddl-auto=validate -spring.jpa.show-sql=true -spring.jpa.properties.hibernate.format_sql=true - -# ─── SERVER PORT ─── -server.port=8080 diff --git a/backend/target/classes/com/rit/portal/PortalApplication.class b/backend/target/classes/com/rit/portal/PortalApplication.class deleted file mode 100644 index 9bc3c4044977df7cf64c21c1775dfaa5005f45cd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 735 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 diff --git a/backend/target/classes/com/rit/portal/entity/NotePyq$NotePyqBuilder.class b/backend/target/classes/com/rit/portal/entity/NotePyq$NotePyqBuilder.class deleted file mode 100644 index 5ba61c204eb3ad837cc92923f62b7f7cd8491fed..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3597 zcmd6pZC4vb6vzJ)9umUx6si?#AFyB{MS@jSNU4QX3Yr2IN^PqzmShTBHal^5f(O5a z@BA2gPCfP1bNbrjhw^x5XJR&N4hg*S#bjsh%>3@my>su)-~YUR17I27Cy`*7DTzwX zcVwam(CKqMKp(g?(h_T-)2vZSK9`CCQL*$|Nr~ zCW^w_&of+lSR-78uX{&M;Ox14+4F?7r6at6AyafkWltRD?sJd(w&Z2n(nIQ9t|l9_ zZRtB9FB#N~#&nriZC_UCxD2U)S9l<~&oCO&RIc*1eA`jOgCS7BU!QST}lGxb+;`KeaH53-pBdRJ1UR zPql&MlUQW9e5$|GSio)dkd_$UM9ma>I^ucbnKMf2#y;b=xUyzYD}z#Kq@>V087`1< zViBIEv{Xo9r76ki9Tx84ONQi;?bi6_b9zNlW9USbZ-LBEuDfqx4eJaSEA}BT2(M(z z$BsOpULb8x(i{IP3X5Ove=2ElT}oTqqUM+QDrGzd%jEA_WookOiV!l8zFpN}9;C5> ztt2)XCK}Fgyd!bQbNbTST&s3T3jbKy@f(I;qSi92HE_-L$}SHkib5RLs`A$%(bw@sE#Qos@te1;e;tD zs$Z`i;i^XQs86Zt5uMWILrEI-V~I_ZFV;OOa|PE90!~kEu=!|7e9JHyb3!Y#Ch?Tv z%IQm~Drp~3&}~p{ToZxBI3>m|iib23D%;a2Nh9@5(Kn&;b4*5=Iwqr>9g|Vsjmanj z$7Ga?V=~IhF&X9On2fUP3E2Rhn`$hbJ$jRiB+b!EM&F+7E4=etc)fS&S6vnuz$N;% z^a8wx%QT|AjVolHlb}4o6EvU9-uxX`v%gX|fs-h80$O5Fs;BKcPSPGl9wvSt-fzdh z-Z5YM%JBO_et&!ZWXF8%cf;=w`Br=WjgI;H4H>>F(Tuz@-OfJQj`{jM8va1YA8LR8 znU4ATZ5#ej$RBRcpY52h@T iBuh~=J*2jcM>NXN2^sy3+@%ck7*FsFWB4xIx$rNek=+FV diff --git a/backend/target/classes/com/rit/portal/entity/NotePyq.class b/backend/target/classes/com/rit/portal/entity/NotePyq.class deleted file mode 100644 index 16b04ad31b0cd38b5d54caec1c22651a12004435..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4378 zcmb7H3sclq6h484g=|D#qFc1q)>ep*)xK=;(IO~ax(g^Pt@c5~?iHiiWKFU-^jEbr z-O;f#{(%0G{)^!;_Dz4kwC4C?WB)~-ate(iU#b}_FGb;ynJ`9R<1o#XbAhVghG=suQz?ylzyL1bYRJ`+D)4c+ilA-u%SUj zjugs!?Jy8(L$t7`Cc?)4iKf85T!p4$R?0Sf7B1sFF)hKaDU`E~CLW_q+4d!=&~RSb zmSZ#?x|Tv(wAya-QmSs6zjt*!`92m&c}osLuh8)>VY?ns)OL$OMPm`{V&E6&s8n(4 zhP8}<*06$ig-CGQfMkBBZCVZ9%hkF0$~&v%d{`}a0u4aThILT3_Yx{$vSK;S9p`ze zn_;NrmYjyj)0{$=j$%xu3#4mwkuE7TeABc||F%MdbMspWMa8tmTD!R;+!`m3bI)7e zGF+3_A#rF|_+^yyB(`~|phuDGPc<5%Vfg1iHBrT9-yI50GVp3atxX?*46BVnztZR! zjVYu;b~C6YCg0F#lF7$FUhWnab8c%i#hd~wbgS&d0sN@WSpJSi({v(`zZVuA)9-3D z!#HDXp;vCq`c9)_WP(+=*qHvkMzc(xh^YkC#@scH&afeN`C+WkW+T@UN{#g%Xmpl7 zKwEl2^rz+y2cJ_oUKRdRr?FwU=oT~<5`ZR)!h0gF6GoS{REUI8g=1LsVu^?_vm3#g zI7Adc#$d51a0nNJ^upC+2OT*PV@Hk1cH;p#9a>6=$NZK`gQTm}peK1kolf-XF!V{I zU3!Y9+~ZNW{zRdfxpKT*BiB`WMpmAlD|Av~^jp)YNgHSp+j*(b+xYh743A|YjOY<5 zktat~>o;}~sDC3jWU4ovwp$mRDU8f;4qf4`E0jFc@5%#?XB0f_Kab>409VDyCA{s{ z{tMKcR<>~zEm?-=2`tAB&O21Y8peKA@TBqR9IBho36%zTa$uFmY67bfJh}E&K?Tx4 zzzhi41w4=AH~v^kVhSWPFa(kr==Nj=+C5~9<9QrbPkMAJGK7xr=e`$l(f9q_(-9Ya zA95q_f&4xUpt1WI=jbFh{~>(@f%6Ci2j*iuKf!MfH2xd;n=U+hMe~2)eSj|GKT8qf zbVXA5>@CsN1cVYeEIFkAMb{3ik4kkd5TMWKa|kN*1$~(UbUho;*Qr1Y*??}Q0^Q06 z^bLKRvbDu*Kuf6}EoTF|mkP9!4XB(7w3-d5k{Y9GHlTIdND21+Y(Se-!{9jF8w&vE z?ikiDcIeulvJZNlp~}*p2_(YO=B^0_&qMAAoUz2MzePW!!C%h`9}KP#{+NXSF&%y( zD||5iLikAu|0o^)R#y06h=%Y}68}_?qe+s_L)F>`=_uB;_Dez<(Y0fy=n!7h*@%boZ#bNOr;& z{)LSK^s5Orji+XXmL(6(G-=P(~IMSh2y*SF=71adi zw3u_6bgmT`?GBr2IBejEywLEls`7UXT;@0KHr{5Hzepg Date: Wed, 22 Jul 2026 11:09:23 +0530 Subject: [PATCH 4/6] style: replace canopy SVG with images.jpg and remove innovation box --- public/images.jpg | Bin 0 -> 44507 bytes src/pages/Home/Home.tsx | 171 ++++++---------------------------------- 2 files changed, 26 insertions(+), 145 deletions(-) create mode 100644 public/images.jpg diff --git a/public/images.jpg b/public/images.jpg new file mode 100644 index 0000000000000000000000000000000000000000..59cf0584f6aa4eecf86a5b37b982208c36622a8e GIT binary patch literal 44507 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 ori~ - {/* Main campus image/graphic card */} -
- {/* Inline Premium Vector SVG Illustration of RIT Campus Building & Canopy */} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - {/* Sky */} - - - {/* Glowing Sun */} - - - {/* Distant Hills / Tree Line */} - - - - {/* Academic Building Facade (Modern RIT Blocks) */} - - {/* Windows Grid */} - - {/* Row 1 */} - - - - - {/* Row 2 */} - - - - - {/* Row 3 */} - - - - - - - {/* Main Entrance Pillars & Arch (RIT Architecture) */} - - - - {/* Premium Canopy Truss Structure (RIT Event Canopy Representation) */} - - - - - - - - - - {/* Cross trusses */} - - - - - - - - {/* Columns supporting Canopy */} - - - - - - {/* Campus Pathway leading to building */} - - - - - {/* Trees & Foliage in Foreground */} - - - - - - - - - - - - {/* Subtle dark gradient overlay to ensure text contrast */} -
- - {/* Text on top of the image (RIT Events Hub Style) */} -
-

- Rajalakshmi Institute -

-

- of Technology, Chennai -

-
- - Est. 2008 • NBA & NAAC A+ + {/* Main campus image/graphic card */} +
+ Rajalakshmi Institute of Technology Campus + + {/* Subtle dark gradient overlay to ensure text contrast */} +
+ + {/* Text on top of the image (RIT Events Hub Style) */} +
+

+ Rajalakshmi Institute +

+

+ of Technology, Chennai +

+
+ + Est. 2008 • NBA & NAAC A+ +
-
- - {/* Overlapping Dark Card (Innovation Card - Exact Match with Reference Image) */} - - - INNOVATION - -

- Where engineering meets guidance. Fueling the academic journey of our freshers. -

-
{/* Right – Text Content */} From bcfc5f32e0db7c632efbb43abf6b2d1965c5332c Mon Sep 17 00:00:00 2001 From: Amudieshwar A G Date: Wed, 22 Jul 2026 11:20:39 +0530 Subject: [PATCH 5/6] style: add ambient shadow glow and glassmorphic frosted edge border to campus image --- src/pages/Home/Home.tsx | 37 +++++++++++++++++++++++-------------- 1 file changed, 23 insertions(+), 14 deletions(-) diff --git a/src/pages/Home/Home.tsx b/src/pages/Home/Home.tsx index 85f9437..a0f80f6 100644 --- a/src/pages/Home/Home.tsx +++ b/src/pages/Home/Home.tsx @@ -37,21 +37,30 @@ export default function Home() { initial={{ opacity: 0, scale: 0.95 }} animate={{ opacity: 1, scale: 1 }} transition={{ duration: 0.7 }} - className="relative w-full max-w-lg" + className="relative w-full max-w-lg group" > - {/* Main campus image/graphic card */} -
- Rajalakshmi Institute of Technology Campus - - {/* Subtle dark gradient overlay to ensure text contrast */} -
+ {/* Ambient Blurry Glow behind the image container */} +
+ + {/* Main campus image/graphic card */} +
+ Rajalakshmi Institute of Technology Campus + + {/* Glassmorphic border overlay (frosted edge blur effect) */} +
+
+ + {/* Subtle dark gradient overlay to ensure text contrast */} +
{/* Text on top of the image (RIT Events Hub Style) */}
From 0209657182a8c97c305eb5bc5fa897eeec3f6484 Mon Sep 17 00:00:00 2001 From: Amudieshwar A G Date: Wed, 22 Jul 2026 11:57:38 +0530 Subject: [PATCH 6/6] feat: configure explore hub smooth scroll anchor and update homepage legacy stats --- src/constants/index.ts | 8 ++++---- src/pages/Home/Home.tsx | 25 ++++++++----------------- 2 files changed, 12 insertions(+), 21 deletions(-) diff --git a/src/constants/index.ts b/src/constants/index.ts index b032620..07d88c0 100644 --- a/src/constants/index.ts +++ b/src/constants/index.ts @@ -12,11 +12,11 @@ export const NAV_LINKS = [ // ─── Stats ──────────────────────────────────────────────────────────────────── export const STATS: Stat[] = [ - { value: 150, suffix: '+', label: 'PYQs', icon: 'FileText' }, - { value: 40, suffix: '+', label: 'Faculty', icon: 'Users' }, - { value: 25, suffix: '+', label: 'Clubs', icon: 'Star' }, + { value: 20, suffix: '+', label: 'Sports', icon: 'Trophy' }, + { value: 100, suffix: '+', label: 'Faculty', icon: 'Users' }, + { value: 18, suffix: '', label: 'Clubs', icon: 'Star' }, { value: 24, suffix: '/7', label: 'AI Assistant', icon: 'Bot' }, - { value: 1000, suffix: '+', label: 'Students', icon: 'GraduationCap' }, + { value: 5000, suffix: '+', label: 'Students', icon: 'GraduationCap' }, ]; // ─── Features ──────────────────────────────────────────────────────────────── diff --git a/src/pages/Home/Home.tsx b/src/pages/Home/Home.tsx index a0f80f6..edb4ecd 100644 --- a/src/pages/Home/Home.tsx +++ b/src/pages/Home/Home.tsx @@ -37,17 +37,12 @@ export default function Home() { initial={{ opacity: 0, scale: 0.95 }} animate={{ opacity: 1, scale: 1 }} transition={{ duration: 0.7 }} - className="relative w-full max-w-lg group" + className="relative w-full max-w-lg" > - {/* Ambient Blurry Glow behind the image container */} -
- - {/* Main campus image/graphic card */} + {/* Main campus image/graphic card with soft blurry drop shadow */}
- {/* Glassmorphic border overlay (frosted edge blur effect) */} -
-
- {/* Subtle dark gradient overlay to ensure text contrast */} -
+
{/* Text on top of the image (RIT Events Hub Style) */}
@@ -121,7 +112,7 @@ export default function Home() { transition={{ duration: 0.6, delay: 0.3 }} className="flex flex-wrap gap-4 mb-8" > - + - + {/* ─── Features Section ─────────────────────────────────────────────────── */} -
+