Skip to content

Latest commit

 

History

History
269 lines (225 loc) · 7.76 KB

File metadata and controls

269 lines (225 loc) · 7.76 KB
  • 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