Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
41 commits
Select commit Hold shift + click to select a range
e214997
chore: fresh new hero section
anaj00 Apr 3, 2026
6667da7
chore: put the new hero section in the paraluman page
anaj00 Apr 3, 2026
e83e09c
feat: cool new typing hero section
anaj00 Apr 3, 2026
b337a9a
feat: added what you will get and what youll work on
anaj00 Apr 3, 2026
90d0c46
chore: change wordings
anaj00 Apr 3, 2026
d774731
chore: remove the dots at the back of the hero panel
anaj00 Apr 3, 2026
8f865f0
chore: better headers for overview
anaj00 Apr 3, 2026
15529ce
chore: moved about us on top
anaj00 Apr 3, 2026
83bc965
feat: prevent changing status when set to accepted/rejected
jayylmao Apr 3, 2026
ae92f8c
feat: add SuperListingClosedModal and integrate with modal registry
anaj00 Apr 3, 2026
2816271
feat: enhance VerifyPage with loading state and profile checks
anaj00 Apr 3, 2026
9c73657
feat: add profile verification checks in FormsPage, SearchPage, and A…
anaj00 Apr 3, 2026
266ae68
chore: delete super listings that arent on super listings folder
anaj00 Apr 4, 2026
5b06879
feat: cebu pacific super listing
anaj00 Apr 4, 2026
68191c4
feat: opengraph previews for all super listings
anaj00 Apr 4, 2026
c733cf1
feat: made opengraph previews dynamic per page in the super-listing
anaj00 Apr 4, 2026
8134007
chore: better tag for Hero Section
anaj00 Apr 4, 2026
4b56f29
refactor: remove slug validation for super listings in OG image route
anaj00 Apr 4, 2026
acc8ee7
chore: callback to cebpac tag
anaj00 Apr 4, 2026
20bac48
chore: made previewer same branding as site
anaj00 Apr 4, 2026
65caf8f
chore: better looking preview
anaj00 Apr 4, 2026
39c5085
chore: restyle preview
anaj00 Apr 4, 2026
1345c7c
chore: restyled preview to look more on brand
anaj00 Apr 4, 2026
391e37e
fix: preview wasnt loading
anaj00 Apr 4, 2026
cabf8d3
refactor: clean up status change code on hire site
jayylmao Apr 4, 2026
59b7dc0
fix: archiving an applicant does not update the view
jayylmao Apr 4, 2026
c30d31c
feat: add status update messages to applicant page
jayylmao Apr 4, 2026
b243792
Merge branch 'develop' of https://github.com/BetterInternship/Client …
jayylmao Apr 4, 2026
b7cd142
chore: better preview
anaj00 Apr 4, 2026
764d82a
feat: add tooltips for certain actions on the hire site
jayylmao Apr 4, 2026
4282b34
feat: add tooltips for certain actions on the hire site
jayylmao Apr 4, 2026
32763b0
fix: revert change to back button behavior
jayylmao Apr 4, 2026
5af5132
feat: add tooltip to show creation date on dashboard
jayylmao Apr 4, 2026
4540332
feat: more tooltips on the hire site (#437)
jayylmao Apr 4, 2026
9ef5d66
chore: better content, layouting and coloring for Cebu Pacific
anaj00 Apr 4, 2026
988d3d1
chore: better hierarchy
anaj00 Apr 4, 2026
fd3a93d
chore: full width what you will work on
anaj00 Apr 4, 2026
c878e33
chore: fix challenge brief
anaj00 Apr 4, 2026
487a8ba
chore: remove help us
anaj00 Apr 4, 2026
a5d9b94
feat: perma close paraluman applications
anaj00 Apr 5, 2026
2ee9b23
chore: close anteriore and fff
anaj00 Apr 5, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
48 changes: 41 additions & 7 deletions app/hire/dashboard/applicant/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import { statusMap } from "@/components/common/status-icon-map";
import ContentLayout from "@/components/features/hire/content-layout";
import { ApplicantPage } from "@/components/features/hire/dashboard/ApplicantPage";
import { type ActionItem } from "@/components/ui/action-item";
import useApplicationActions from "@/hooks/use-application-actions";
import { useEmployerApplications } from "@/hooks/use-employer-api";
import { updateApplicationStatus, UserService } from "@/lib/api/services";
import { EmployerApplication } from "@/lib/db/db.types";
Expand All @@ -17,7 +18,17 @@ function ApplicantPageContent() {
const jobId = searchParams.get("jobId");
const isDummyProfile = searchParams.get("dummy") === "1";
const [loading, setLoading] = useState(true);

const applications = useEmployerApplications();
const { app_statuses } = useDbRefs();

const {
triggerAccept,
triggerReject,
triggerShortlist,
triggerArchive,
triggerDelete,
} = useApplicationActions(applications.review);

const dummyApplication: EmployerApplication = {
id: "dummy-super-application",
Expand Down Expand Up @@ -76,8 +87,6 @@ function ApplicantPageContent() {
otherApplications = [];
}

const { app_statuses } = useDbRefs();

useEffect(() => {
const fetchUserData = async () => {
if (isDummyProfile) {
Expand Down Expand Up @@ -108,16 +117,37 @@ function ApplicantPageContent() {
[],
);

const getStatuses = (applicationId: string) => {
const getStatuses = (application: EmployerApplication) => {
return unique_app_statuses
.filter((status) => status.id !== 7 && status.id !== 5 && status.id !== 0)
.map((status): ActionItem => {
const uiProps = statusMap.get(status.id);

const handleClick = () => {
switch (status.id) {
case 1:
triggerShortlist(application);
break;
case 4:
triggerAccept(application);
break;
case 5:
triggerDelete(application);
break;
case 6:
triggerReject(application);
break;
case 7:
triggerArchive(application);
break;
}
};

return {
id: status.id.toString(),
label: status.name,
icon: uiProps?.icon,
onClick: () => updateApplicationStatus(applicationId, status.id),
onClick: handleClick,
destructive: uiProps?.destructive,
};
});
Expand All @@ -129,10 +159,14 @@ function ApplicantPageContent() {
<ApplicantPage
application={userApplication}
jobID={jobId || ""}
statuses={
isDummyProfile ? [] : getStatuses(userApplication?.id || "")
}
statuses={isDummyProfile ? [] : getStatuses(userApplication!)}
userApplications={otherApplications}
onArchive={() => {
if (userApplication) triggerArchive(userApplication);
}}
onDelete={() => {
if (userApplication) triggerDelete(userApplication);
}}
/>
</div>
</ContentLayout>
Expand Down
8 changes: 6 additions & 2 deletions app/student/applications/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -109,9 +109,13 @@ const ApplicationCard = ({ application }: { application: UserApplication }) => {
challengeTitleFromJoin.trim().length > 0;
const isUnavailable = !job?.is_active || job?.is_deleted;
const canOpenListing = !!job?.id && !isUnavailable;
const statusLabel = to_app_status_name(application.status) ?? "Pending";
const statusLabel =
application.status === 5 || application.status === 7
? "Closed"
: (to_app_status_name(application.status) ?? "Pending");
let statusBadgeType: "destructive" | "supportive" | "warning" = "warning";
if (statusLabel === "Rejected") statusBadgeType = "destructive";
if (statusLabel === "Rejected" || statusLabel === "Closed")
statusBadgeType = "destructive";
else if (statusLabel === "Accepted" || statusLabel === "Hired")
statusBadgeType = "supportive";
else statusBadgeType = "warning";
Expand Down
25 changes: 0 additions & 25 deletions app/student/fff/layout.tsx

This file was deleted.

104 changes: 0 additions & 104 deletions app/student/fff/opengraph-image.tsx

This file was deleted.

5 changes: 0 additions & 5 deletions app/student/fff/page.tsx

This file was deleted.

19 changes: 16 additions & 3 deletions app/student/forms/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ import {
useFormFilloutProcessPending,
useFormFilloutProcessReader,
} from "@/hooks/forms/filloutFormProcess";
import { isProfileVerified } from "@/lib/profile";

/**
* The forms page component - shows either history or generate based on form count
Expand All @@ -38,10 +39,22 @@ export default function FormsPage() {
if (!isAuthenticated()) {
return; // Exit if not authenticated
}
if (profile.isPending) {
return;
}
if (!isProfileVerified(profile.data)) {
router.push("/register/verify");
return;
}

if (!profile.data?.department && !profile.isPending)
router.push("/profile/complete-profile");
}, [isAuthenticated, profile.data?.department, profile.isPending, router]);
if (!profile.data?.department) router.push("/profile/complete-profile");
}, [
isAuthenticated,
profile.data,
profile.data?.department,
profile.isPending,
router,
]);

// Query 1: Check for updates (cheap query - just a timestamp)
// TODO: Enable this later for smart cache invalidation
Expand Down
25 changes: 23 additions & 2 deletions app/student/layout.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -15,11 +15,32 @@ import MobileNavWrapper from "@/components/shared/mobile-nav-wrapper";
import { SonnerToaster } from "@/components/ui/sonner-toast";
import { ClientProcessesProvider } from "@betterinternship/components";

const baseUrl =
process.env.NEXT_PUBLIC_CLIENT_URL || "https://betterinternship.com";
const baseUrl = (() => {
const isProduction = process.env.NODE_ENV === "production";
const fallbackBaseUrl = isProduction
? "https://www.betterinternship.com"
: "https://dev.betterinternship.com";
const rawConfiguredUrl = process.env.NEXT_PUBLIC_CLIENT_URL?.trim();
const configuredUrl = rawConfiguredUrl
? /^https?:\/\//i.test(rawConfiguredUrl)
? rawConfiguredUrl
: `https://${rawConfiguredUrl}`
: undefined;

// Prevent localhost OG/Twitter URLs so metadata always points to shareable domains.
if (
configuredUrl &&
/^https?:\/\/(localhost|127\.0\.0\.1)(:\d+)?(\/|$)/i.test(configuredUrl)
) {
return fallbackBaseUrl;
}

return configuredUrl || fallbackBaseUrl;
})().replace(/\/$/, "");
const ogImage = `${baseUrl}/student-preview.png`;

export const metadata: Metadata = {
metadataBase: new URL(baseUrl),
title: "BetterInternship",
description: "Better Internships Start Here.",
icons: {
Expand Down
30 changes: 0 additions & 30 deletions app/student/miro/layout.tsx

This file was deleted.

4 changes: 0 additions & 4 deletions app/student/miro/miro-icon.svg

This file was deleted.

5 changes: 0 additions & 5 deletions app/student/miro/page.tsx

This file was deleted.

Loading