- TODO: Remove below link if not utilized and icons are fully replaced by svgs.
apps/web/src/app/layout.tsx
<head>
{/* TODO: Remove below link if not utilized and icons are fully replaced by svgs */}
<link
rel="stylesheet"
href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@20..48,400..700,0..1,-50..200"
/>
</head>- TODO: move this to shops section.
apps/web/src/app/page.tsx
{
/* TODO: move this to shops section */
}
{
/* Quick Filters (Chips) */
}
<QuickFilters />;- TODO: make this visually appealing.
apps/web/src/app/page.tsx
{
/* TODO: make this visually appealing */
}
<h1>{`Mess menu not appetizing enough? Check out shops open at the moment *right arrow that takes to shop tab-->*`}</h1>;- TODO: future feature --> select from different campus locations.
apps/web/src/app/shop/page.tsx(1st div inside header section)
<div className="flex flex-col">
<p className="text-[11px] font-bold text-[#1aa86b] uppercase tracking-[0.12em] mb-0.5">
Location
</p>
<div className="flex items-center gap-1 cursor-pointer">
<span className="text-lg font-extrabold text-[#0d1b16] dark:text-white">
North Campus
</span>
<span className="material-symbols-outlined text-[#1aa86b] text-xl">
expand_more
</span>
</div>
</div>- TODO: share button
<div className="mt-2">
<button className="w-full bg-primary hover:bg-primary/90 active:scale-[0.98] transition-all text-black font-bold py-4 px-6 rounded-2xl shadow-lg shadow-primary/30 flex items-center justify-center gap-3">
<span className="material-symbols-outlined">ios_share</span>
Share My Saved Spots
</button>
</div>- TODO: make recently view feature dynamic
{
/* <RecentlyViewedCarousel /> */
}- TODO: add note feature
{
hasNote && note ? (
<div className="bg-gray-50 dark:bg-white/5 rounded-xl p-3 flex items-start gap-2 cursor-pointer hover:bg-gray-100 dark:hover:bg-white/10 transition-colors">
<span className="material-symbols-outlined text-accent-orange text-[18px] mt-0.5">
sticky_note_2
</span>
<p className="text-xs text-gray-600 dark:text-gray-300 italic">
"{note}"
</p>
</div>
) : (
<button className="w-full py-2 border border-dashed border-gray-300 dark:border-gray-700 rounded-xl text-xs text-gray-400 flex items-center justify-center gap-2 hover:bg-gray-50 dark:hover:bg-white/5 transition-colors">
<span className="material-symbols-outlined text-[16px]">edit_note</span>
Add a private note...
</button>
);
}- TODO: estimate location after mapping is done
<div className="flex items-center gap-2">
<span className="text-xs text-gray-500 dark:text-gray-400 font-medium">
{distance}
</span>
</div>- TODO: add 'your xyz friends also saved this'
{
spot.friends && (
<div className="flex items-center justify-between text-xs">
<div className="flex items-center">
<div className="flex -space-x-2 mr-2">
{spot.friends.avatars.map((avatar, idx) => (
<Image
key={idx}
src={avatar}
alt={`Friend ${idx + 1}`}
width={20}
height={20}
className="w-5 h-5 rounded-full border-2 border-white dark:border-gray-800"
/>
))}
</div>
<span className="text-gray-600 dark:text-gray-400">
{spot.friends.names}
</span>
</div>
</div>
);
}-
TODO: implement action modal in v1.2
-
TODO: implement trophy case in v1.2
-
TODO: implement profile badges in v1.2
-
TODO: fetch from backend --> top 5 popular cuisine items.
apps/web/src/app/shop/page.tsx
// TODO: fetch from backend -->top 5 popular cuisine items- TODO: fetching shop details should be done dynamically.
apps/web/src/app/shop/page.tsx
<section className="flex flex-col gap-3">
<h2 className="text-lg font-bold text-[#0d1b16] dark:text-white">
Popular Now
</h2>
{/* TODO: fetching shop details should be done dynamically */}
{shops.map((shop) => (
<ShopAndItemsCard
key={shop.name}
name={shop.name}
image={shop.image}
rating={shop.rating}- TODO: badge for students/faculty, etc.
apps/web/src/app/profile/page.tsx
<div className="flex items-center gap-2">
{/*TODO: badge for students/faculty, etc.*/}
{/*<ProfileBadge />*/}
<span className="text-gray-400 text-sm font-medium">@anon_eats</span>
</div>- TODO: Enable in future when location feature is introduced.
apps/web/src/components/cards/ShopAndItemsCard.tsx
<div className="flex items-center gap-3 text-gray-500 dark:text-gray-400">
{/* <span className="text-xs font-medium">•</span> */}
{/* TODO: Enable in future when location feature is introduced */}
{/* <span className="text-xs font-semibold">{shop.distance}</span> */}
{/* <span className="text-xs font-medium">•</span> */}
<span
className={`px-2 py-0.5 rounded-full text-[10px] font-bold uppercase tracking-wide ${
statusToneMap[shop.statusTone]
}`}
>
{shop.status}- TODO: Fetch mess meal times from API.
apps/web/src/components/ui/LiveStatusPill.tsx
useEffect(() => {
// TODO: Fetch mess meal times from API
// const fetchMealTimes = async () => {
// try {
// const response = await fetch('/api/meals');
// const data = await response.json();
// setMealTimes(data.mealTimes || mealTimes);
// } catch (error) {
// console.error("Error fetching meal times:", error);
// }
// };- TODO: make it dynamic.
apps/web/src/components/ui/MessMenuItem.tsx
<>
{/* TODO: make it dynamic */}
<div className="flex items-center justify-between">
<div className="flex items-center gap-2">
<span className="material-symbols-outlined text-green-600 dark:text-green-400 text-sm">
fiber_manual_record
</span>
<span className="text-[#0d1b13] dark:text-gray-200 font-medium">
Rajma Chawal
</span>
</div>- TODO: replace with actual API call.
apps/web/src/components/ui/NotificationBell.tsx
try {
// TODO: replace with actual API call
// const response = await fetch('/api/notifications');
// const data = await response.json();
// setHasNotifications(data.hasUnread);
setHasNotifications(true);
// set to false after api gets built
// setHasNotifications(false);
} catch (error) {- TODO: apply rate limiting when connecting to a real API. maybe 2-3 times per day?
apps/web/src/components/ui/TabsToggle.tsx
export default function TabsToggle() {
const [viewMode, setViewMode] = useState<"spots" | "dishes">("spots");
const [savedDishes, setSavedDishes] = useState<SavedDish[]>(mockSavedDishes);
// TODO: apply rate limiting when connecting to a real API. maybe 2-3 times per day?
const handleFavoriteToggle = (id: number) => {- TODO: turn the dark green theme to light slate color theme.
apps/web/src/styles/globals.css
@import "tailwindcss";
/* @import "@heroui/styles"; */
:root {
--background: #ffffff;
--foreground: #171717;
}
/* TODO: turn the dark green theme to light slate color theme*/
@theme inline {
--color-background: var(--background);- TODO: level indicator in v1.3/v1.4
<div className="absolute bottom-0 right-0 translate-x-1 translate-y-1 bg-[#FB923C] text-white text-xs font-bold px-2 py-1 rounded-full shadow-sm border-2 border-white dark:border-[#1e2e26] flex items-center gap-1">
<span className="material-symbols-outlined text-[14px]">
local_fire_department
</span>
Lvl 3
</div>- TODO: implement dark mode support, check all the pages for dark mode constrast