Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
156 commits
Select commit Hold shift + click to select a range
66f1c0d
feat: add Art model
Karl-Sue Nov 25, 2025
ddbf780
refactor: keep model register minimal
Karl-Sue Nov 26, 2025
b26d12d
Add ArtContributor model with API endpoints
DDuu123321 Nov 28, 2025
8ac4927
art-page-frontend
hanminh1203 Dec 5, 2025
8b98a06
art-page-frontend
hanminh1203 Dec 5, 2025
67ba4d8
Merge branch 'issue-8/art-page' of https://github.com/codersforcauses…
hanminh1203 Dec 6, 2025
7f91e0b
refactor: keep admin register simple
Karl-Sue Dec 6, 2025
aeedeec
fix: space error
Karl-Sue Dec 6, 2025
31954af
Load arts from backend
hanminh1203 Dec 10, 2025
9e67fa6
Change field name style
hanminh1203 Dec 10, 2025
c955b14
Readd art field to create data
hanminh1203 Dec 10, 2025
c10ee23
Make the image height corresponding to the text
hanminh1203 Dec 10, 2025
9af2dc9
Filter on backend + include contributors into art
hanminh1203 Dec 10, 2025
1f2ce0c
Add Pagination on backend
hanminh1203 Dec 10, 2025
eed05ce
Improve frontend to support responsive
hanminh1203 Dec 10, 2025
a1371d6
Improve resize image
hanminh1203 Dec 10, 2025
1f1958c
Back button padding
hanminh1203 Dec 10, 2025
f4d442a
feature: improve responsive layout
Karl-Sue Dec 13, 2025
ac79752
fix: resolve merge conflicts in artwork pages
Karl-Sue Dec 13, 2025
3b5607e
feat: add Art hook
Karl-Sue Dec 13, 2025
2e9ef67
feat: add Artwork hook
Karl-Sue Dec 13, 2025
3d38119
feat: add placeholder art
Karl-Sue Dec 13, 2025
0b4164d
Fix flake8
hanminh1203 Dec 13, 2025
45afd6d
fix: match Prettier code style
Karl-Sue Dec 13, 2025
b7273d5
Fix flake8
hanminh1203 Dec 13, 2025
fd90b63
Merge pull request #37 from codersforcauses/issue-8-resolve-merge-con…
Karl-Sue Dec 13, 2025
53e30c3
Refactor code for reuseability
hanminh1203 Dec 20, 2025
b234e60
Error message
hanminh1203 Dec 20, 2025
cc4ac45
Remove mock data on Frontend
hanminh1203 Dec 20, 2025
fb3f1c9
Merge remote-tracking branch 'origin/main' into issue-8-Individual_ar…
hanminh1203 Dec 20, 2025
f0c5e4c
Solve conflict and adapt code
hanminh1203 Dec 20, 2025
08f0865
fix flake8 on backend
hanminh1203 Dec 20, 2025
23b65ea
Fix Prettier and type check
hanminh1203 Dec 20, 2025
6cc9d1c
Correct django-filter version
hanminh1203 Dec 20, 2025
39306ef
Commit poetry.lock
hanminh1203 Dec 20, 2025
d564d05
Commit poetry.lock
hanminh1203 Dec 20, 2025
b0a3062
Correct script order
hanminh1203 Dec 20, 2025
d1c5ee9
Correct script order
hanminh1203 Dec 20, 2025
c820c7d
feat: implement individual art pages with full functionality
DDuu123321 Jan 6, 2026
2112171
fix: remove null=True from URLField to pass flake8
DDuu123321 Jan 6, 2026
6640e7f
style: fix prettier formatting in error-modal.tsx
DDuu123321 Jan 6, 2026
f77d7a7
Remove the import and then add the icon import: Discord and Instagram
DDuu123321 Jan 7, 2026
4277b4d
Fix import formatting in [id].tsx
DDuu123321 Jan 7, 2026
959c3e1
feature: add mock data for dev
Karl-Sue Jan 9, 2026
6a7a5e0
chore: update migrations and frontend components
DDuu123321 Jan 9, 2026
e971856
style: fix prettier formatting issues in [id].tsx
DDuu123321 Jan 9, 2026
24965ba
feature: add link to button
Karl-Sue Jan 14, 2026
27777e2
merge: resolve merge conflict between local and remote branch
Karl-Sue Jan 14, 2026
4c5c1ba
Refactor: Move social links from ArtContributor to Member model and r…
DDuu123321 Jan 14, 2026
2951ead
Fix: Remove hardcoded social media fields to comply with schema design
DDuu123321 Jan 16, 2026
1138ccb
Resolve merge conflict in Navbar: keep z-100 from main
DDuu123321 Jan 16, 2026
6df9c3d
Fix: Remove django_filters import and usage from views.py
DDuu123321 Jan 16, 2026
8e9de27
Update views.py
DDuu123321 Jan 16, 2026
85ea95d
Fix: Add newline at end of views.py
DDuu123321 Jan 16, 2026
163cc05
refactor: remove pagination
Karl-Sue Jan 17, 2026
57a7a84
refactor: change from viewset to a standard RetrieveAPIView
Karl-Sue Jan 17, 2026
752ed72
bug: remove leftover code:
Karl-Sue Jan 17, 2026
ec5f54a
Create backend model and API to retrieve featured art pieces.
hanminh1203 Jan 10, 2026
2a1cea8
refactor: remove redundant file
Karl-Sue Jan 17, 2026
7afaaa9
bug: fix the unused components error
Karl-Sue Jan 17, 2026
1900c91
Merge branch 'main' into issue-8-Individual_art_pages
Karl-Sue Jan 17, 2026
255583e
Merge branch 'main' into issue-8-feature
Karl-Sue Jan 17, 2026
1a41234
Merge branch 'main' into issue-8-Individual_art_pages
SafetyInObscurity Jan 17, 2026
60c5243
Merge branch 'main' into issue-8-Individual_art_pages
SafetyInObscurity Jan 17, 2026
cfda27b
Merge branch 'main' into issue-8-Individual_art_pages
DDuu123321 Jan 21, 2026
665ac3d
refactor: redesign artshowcase
Karl-Sue Jan 21, 2026
387fbf0
fix: styling
Karl-Sue Jan 21, 2026
c487a57
feat: add interactive artwork cards with flip animation and responsiv…
Karl-Sue Jan 24, 2026
8d20e20
Merge branch 'issue-8-feature' into issue-8-Individual_art_pages
Karl-Sue Jan 24, 2026
5deca41
merge: resolve merge conflict when merging main
Karl-Sue Jan 24, 2026
ab4a7ee
refactor: remove discord + insta url for frontend
Karl-Sue Jan 24, 2026
0a6c08c
refactor: remove basedto + page-reponse
Karl-Sue Jan 24, 2026
08b4de6
styling: using font-sans instead of font-jersey10
Karl-Sue Jan 24, 2026
ca9ec39
Fix: Remove deprecated social media fields and unify font usage
DDuu123321 Jan 27, 2026
d455d9c
Merge branch 'main' into issue-8-Individual_art_pages
DDuu123321 Jan 30, 2026
1f56957
Merge conflicting migrations
DDuu123321 Jan 30, 2026
fd39a11
Fix flake8 formatting error
DDuu123321 Jan 30, 2026
76e5048
conflict: merge main
Karl-Sue Jan 31, 2026
bd8ad2b
add: migration
Karl-Sue Jan 31, 2026
46bb94c
merge: issue 40
Karl-Sue Jan 31, 2026
7b047ef
Fix API response for featured arts
DDuu123321 Feb 2, 2026
ae42906
merge: issue-40/backend
Karl-Sue Feb 4, 2026
fb56dfc
add: migration
Karl-Sue Feb 4, 2026
2f50442
refactor: change api response
Karl-Sue Feb 4, 2026
c84e9dc
merge: main + resolve conflict
Karl-Sue Feb 4, 2026
0aa032d
added source_game fields to the API
DDuu123321 Feb 4, 2026
7793066
add: migration
Karl-Sue Feb 4, 2026
7ac5eeb
fix: eslint type
Karl-Sue Feb 4, 2026
e130d81
refactor: use svgs instead of inline declaration
Karl-Sue Feb 7, 2026
8853c77
refactor: using AddConstraint in migration instead of AlterConstraint
Karl-Sue Feb 7, 2026
f82e5e2
Merge remote-tracking branch 'origin/issue-40/backend' into issue-8-m…
Karl-Sue Feb 7, 2026
a12b072
feature: connect frontend + backend
Karl-Sue Feb 7, 2026
626ac05
feature: add tests for art model
Karl-Sue Feb 7, 2026
319b1a2
feature: add fallback when server fail
Karl-Sue Feb 7, 2026
1246ac5
feature: add api endpoint /api/arts/[id]
Karl-Sue Feb 11, 2026
f72ee8a
fix: eslint error
Karl-Sue Feb 11, 2026
0e2e2b4
add art doc
Karl-Sue Feb 13, 2026
03f7e1a
fix: art documentation - provide more details
Karl-Sue Feb 14, 2026
e99cb33
refactor: move file location to /client, next to src and public
Karl-Sue Feb 14, 2026
7e445c9
refactor: Art class for consistency with Game team issue #81
Karl-Sue Feb 14, 2026
5ca579c
merge: resolve merge conflict with main branch
Karl-Sue Feb 18, 2026
cfe92cb
Reworked how pronouns and names are arranged
Games4Doritos Feb 18, 2026
ab66a47
Undid ternary logic for pronouns
Games4Doritos Feb 19, 2026
6030880
changed the python version constraints in the pyproject.toml to avoid…
samjjacko Feb 21, 2026
a38fe17
linked landing page buttons to game and art showcase respectively
Feb 20, 2026
c8854b2
Added member profile documentation
Feb 14, 2026
ba34f30
Added social media link information to the member profile documentation
Feb 20, 2026
7952656
404 page stuffs
saltyypringle Jan 28, 2026
21ec32f
fixed small styling
saltyypringle Jan 31, 2026
5b81c47
typo
saltyypringle Jan 31, 2026
981ffc8
moved the trivia to a json file
saltyypringle Feb 7, 2026
f9ede4f
prettier
saltyypringle Feb 7, 2026
efdee09
Update client/src/pages/404.tsx
saltyypringle Feb 7, 2026
da1caa5
Update client/src/pages/404.tsx
saltyypringle Feb 21, 2026
544b666
fixed styling for mobile view
saltyypringle Feb 21, 2026
5d5df64
resolve conflict between remote and local branch
Karl-Sue Feb 21, 2026
25c468f
still needs a description potentially
KKatariah Feb 21, 2026
98880aa
fix: remove unnecessary test
Karl-Sue Feb 21, 2026
876d7cd
fix: formatting
Karl-Sue Feb 21, 2026
29babd8
delete: placeholder image that is no longer needed
Karl-Sue Feb 21, 2026
120cb70
delete: redundant comment
Karl-Sue Feb 21, 2026
7e79d4f
Merge branch 'main' into issue-8-merge-40
laurenpudz Mar 1, 2026
5cd8f7c
remove old migrations
laurenpudz Mar 1, 2026
942133f
get rid of svgs and unnecessary components
laurenpudz Mar 1, 2026
7ea45a1
simplify individual art page and contributor list
laurenpudz Mar 1, 2026
c04847e
make individual page somewhat responsive
laurenpudz Mar 1, 2026
67def40
start cleaning up showcase page
laurenpudz Mar 1, 2026
095b63b
Merge branch 'main' into issue-93-events_documentation
Games4Doritos Mar 28, 2026
f18ed12
Refined Events docs
Games4Doritos Mar 28, 2026
f8395b4
Fixing test and flake8 errors
SafetyInObscurity Apr 4, 2026
8d35c4f
Merge branch 'main' into issue-8-merge-40
SafetyInObscurity Apr 4, 2026
80a53e3
Merge migrations
SafetyInObscurity Apr 4, 2026
3e30b57
Merge remote-tracking branch 'origin/main' into issue-96-contributors…
samjjacko Apr 15, 2026
95f87ee
Merge remote-tracking branch 'origin/main' into issue-93-events_docum…
samjjacko Apr 15, 2026
87aea7e
added url
samjjacko Apr 15, 2026
22c27c3
renamed and removed random script directory
samjjacko Apr 15, 2026
06d08d6
merged issue-81 into this branch
samjjacko Apr 15, 2026
2d68543
glued branches together, refactored a bit and wrote some logic to dis…
samjjacko Apr 16, 2026
f02f14b
Merge branch 'issue-96-contributors_documentation' into unifying_art
samjjacko Apr 16, 2026
0f3c3a7
Merge branch 'issue-93-events_documentation' into unifying_art_branches
samjjacko Apr 16, 2026
f8ee130
added events documentation
samjjacko Apr 16, 2026
0fc6ef3
genuinely have no idea how duplicates emerged
samjjacko Apr 16, 2026
8208665
prettier
samjjacko Apr 16, 2026
c9c1823
Correct migrations
SafetyInObscurity Jul 11, 2026
16b1109
quick fixes - add utility classes and remove commentsd
laurenpudz Jul 11, 2026
7b12876
remove artwork mocking
laurenpudz Jul 18, 2026
a210408
remove console logs
laurenpudz Jul 18, 2026
fbdad17
fixed (to my understanding) the get_artwork serialiser function
samjjacko Jul 19, 2026
f6c2f5f
made a rudimentary sliding carousel for the featured artwork. borders…
samjjacko Jul 21, 2026
7a7a787
fixed flickering, but at what cost
samjjacko Jul 21, 2026
f87efc0
Carousel stops on scroll now instead of hover, and can be scrolled. c…
samjjacko Jul 22, 2026
d4137b5
decided that draggable carousels made more sense. helps simplify thin…
samjjacko Jul 24, 2026
1e9c3cb
fixed the most obvious hydration error of all time
samjjacko Jul 24, 2026
13128f9
minor fixes
samjjacko Jul 24, 2026
31cb64d
merge main into unifying_art_branches
samjjacko Jul 24, 2026
ccb89c2
fix padding for mobile
laurenpudz Jul 25, 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
2 changes: 1 addition & 1 deletion client/documentation/admin-dashboard/committee.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
## Committee Members

URL: `/admin/game_dev/committee/add/`
URL: `/admin/game_dev/committee/`

Profiles of the Committee Members of the club that are displayed on the about page `/about`.

Expand Down
9 changes: 3 additions & 6 deletions client/documentation/admin-dashboard/contributors.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ Models that associate a member object with another certain object as a contribut

## Game Contributor

URL: `/admin/game_dev/gamecontributor/`
A model that will associate a certain member with having contributed to a certain game. A Game Contributor object will be represented under the 'Contributors' section of a game's page as the name of the member who contributed.

## Fields
Expand All @@ -18,19 +19,15 @@ A model that will associate a certain member with having contributed to a certai

You will see a little magnifying glass when selecting a Game and Member, click on it to see their respective table and be able choose the integer id's using the desired details. Though none of the individual fields are a primary key, the actual primary key is the unique (Game, Member) pair that each object forms.


## Art Contributor

- This can be found inline inside of an art entry, e.g. `/admin/game_dev/art/1/change/`.

A model that will associate a certain member with having contributed to a certain artwork. An Art Contributor object will be represented under the 'Contributors' section of an artworks's page as the name of the member who contributed.

## Fields

**Art:** Required field for the artwork that the contributor is for. It is an integer field that corresponds to the raw integer id of an Art object in the Art table, known as a Foreign Key.

**Member:** Required field for the member that is the contributor to the specified artwork. It is an integer field that corresponds to the raw integer id of a Member object in the Member table, known as a Foreign Key.

**Role:** Required character field for the description of the role that the person played in contributing to the artwork. Maximum length of 100 characters

## Other Notes

You will see a little magnifying glass when selecting an Art and a Member, click on it to see their respective table and be able choose the integer id's using the desired details. Though none of the individual fields are a primary key, the actual primary key is the unique (Art, Member) pair that each object forms.
10 changes: 2 additions & 8 deletions client/next.config.mjs
Original file line number Diff line number Diff line change
@@ -1,12 +1,6 @@
// import os from "node:os";
Comment thread
laurenpudz marked this conversation as resolved.
// import isInsideContainer from "is-inside-container";

// const isWindowsDevContainer = () =>
// os.release().toLowerCase().includes("microsoft") && isInsideContainer();

/** @type {import('next').NextConfig} */

const config = {
const nextConfig = {
reactStrictMode: true,
turbopack: {
root: import.meta.dirname,
Expand All @@ -27,4 +21,4 @@ const config = {
// : undefined,
};

export default config;
export default nextConfig;
16 changes: 16 additions & 0 deletions client/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions client/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@
"react": "19.1.0",
"react-dom": "19.1.0",
"react-social-icons": "^6.25.0",
"react-use-measure": "^2.1.7",
"tailwind-merge": "^3.3.1",
"tailwindcss-animate": "^1.0.7"
},
Expand Down
6 changes: 6 additions & 0 deletions client/public/placeholder-icon.svg

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Need to check if this is actually getting used or not

Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Empty file removed client/scripts/open-when-ready.js
Empty file.
3 changes: 1 addition & 2 deletions client/src/components/main/Footer.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@ import {
Home,
Map,
Palette,
Sparkles,
Users,
} from "lucide-react";
import Image from "next/image";
Expand Down Expand Up @@ -120,7 +119,7 @@ export default function Footer() {
ease: "easeInOut",
}}
>
<Sparkles className="h-4 w-4 text-yellow-400" />
<Gamepad2 className="h-5 w-5 text-yellow-400" />
</motion.div>
</motion.div>
<div>
Expand Down
117 changes: 0 additions & 117 deletions client/src/components/main/MemberProfile.tsx

This file was deleted.

116 changes: 116 additions & 0 deletions client/src/components/ui/ContinuousCarousel.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,116 @@
import {
animate,
AnimationPlaybackControls,
motion,
useMotionValue,
} from "framer-motion";
import { useCallback, useEffect, useRef } from "react";
import useMeasure from "react-use-measure";

import ImageCard from "@/components/ui/ImageCard/ImageCard";
import { Art } from "@/types/art";

import ImageCardBack from "./ImageCard/ImageCardBack";

const GAP = 16;
const DURATION = 90;

// modifying this to accept anything with a name, src, and id should be trivial.
export default function ContinuousCarousel(artworks: Art[], reverse = false) {
const [ref, { width }] = useMeasure();
const xTranslation = useMotionValue(0);

const controlsRef = useRef<AnimationPlaybackControls | null>(null);

const startAnimation = useCallback(
(from: number) => {
const finalPosition = -(width + GAP) / 3;
const rangeSize = -finalPosition;

controlsRef.current?.stop();

// Normalize `from` into [finalPosition, 0) so the loop restarts cleanly
const normalizedFrom = -(((-from % rangeSize) + rangeSize) % rangeSize);
xTranslation.set(normalizedFrom);

const target = reverse ? 0 : finalPosition;
const loopStart = reverse ? finalPosition : 0;

const startFullLoop = () => {
const controls = animate(xTranslation, [loopStart, target], {
ease: "linear",
duration: DURATION,
repeat: Infinity,
repeatType: "loop",
repeatDelay: 0,
});
controlsRef.current = controls;
};

// if we're already at the target end, jump to loop start and begin
const remaining = Math.abs(target - normalizedFrom);
if (remaining < 0.5) {
xTranslation.set(loopStart);
startFullLoop();
return;
}

// animate the rest of this cycle, then resume full loops
const partialDuration = DURATION * (remaining / rangeSize);
const controls = animate(xTranslation, target, {
ease: "linear",
duration: partialDuration,
onComplete: startFullLoop,
});
controlsRef.current = controls;
},
[xTranslation, width, reverse],
);

useEffect(() => {
startAnimation(0);
return () => {
controlsRef.current?.stop();
};
}, [startAnimation]);

const items = artworks ?? [];
return (
<div className="overflow-hidden py-10">
<motion.div
className="flex w-max cursor-grab select-none gap-[16px] active:cursor-grabbing"
ref={ref}
style={{ x: xTranslation }}
// i'm not sure how to make these have momentum.. future TODO?
onPanStart={() => controlsRef.current?.stop()}
onPan={(_, info) => {
const rangeSize = (width + GAP) / 3;
const next = xTranslation.get() + info.delta.x;
const normalized = -(((-next % rangeSize) + rangeSize) % rangeSize);
xTranslation.set(normalized);
}}
onHoverEnd={() => startAnimation(xTranslation.get())}
>
{/* we need three copies to make sure it doesn't randomly snap incorrectly... issues may arise on huge display resolutions */}
{[...items, ...items, ...items].map((item: Art, i: number) => (
<motion.div
key={`${item.art_id} - ${i}`}
style={{ transform: "translateZ(0)" }}
whileHover={{
scale: 1.05,
zIndex: 1,
}}
transition={{ type: "spring", stiffness: 300, damping: 20 }}
>
<ImageCard
imageSrc={item.media || undefined}
imageAlt={item.name}
href={`/artwork/${item.art_id}`}
backContent={<ImageCardBack artwork={item} />}
/>
</motion.div>
))}
</motion.div>
</div>
);
}
36 changes: 36 additions & 0 deletions client/src/components/ui/ContributorsList.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
import Link from "next/link";

import { ArtContributor } from "@/types/art-contributor";

interface ContributorsListProps {
contributors: ArtContributor[];
}

export default function ContributorsList({
contributors,
}: ContributorsListProps) {
if (contributors.length === 0) {
return null;
}

return (
<>
<div className="font-jersey10 text-2xl text-accent">Contributors</div>
<div className="relative flex flex-col gap-1">
{contributors.map((contributor) => (
<div key={contributor.id}>
<Link
href={`/members/${contributor.member_id}`}
className="text-accent hover:underline"
onClick={(e) => e.stopPropagation()}
>
{contributor.member_name}
</Link>
{" - "}
<span>{contributor.role}</span>
</div>
))}
</div>
</>
);
}
Loading
Loading