@@ -41,6 +41,7 @@ interface Project {
4141 organization : string ;
4242 repositoryUrl : string ;
4343 websiteUrl ?: string ;
44+ timelineUrl ?: string ;
4445 difficulty : 'beginner' | 'intermediate' | 'advanced' ;
4546 duration : string ;
4647 technologies : string [ ] ;
@@ -367,7 +368,17 @@ export default function ProjectDetailPage({ params }: { params: Promise<{ id: st
367368 } ) ;
368369 } ;
369370
370- const isDeadlinePassed = project ? new Date ( ) >= new Date ( project . applicationDeadline ) : false ;
371+ const getDeadlineEnd = ( dateString : string ) => {
372+ const [ year , month , day ] = dateString . split ( '-' ) . map ( Number ) ;
373+
374+ if ( ! year || ! month || ! day ) {
375+ return new Date ( dateString ) ;
376+ }
377+
378+ return new Date ( year , month - 1 , day , 23 , 59 , 59 , 999 ) ;
379+ } ;
380+
381+ const isDeadlinePassed = project ? new Date ( ) > getDeadlineEnd ( project . applicationDeadline ) : false ;
371382 const spotsRemaining = project ? project . maxMentees - ( project . selectedMentees ?. length || 0 ) : 0 ;
372383 const canApply = project ? project . status === 'open' && ! isDeadlinePassed && spotsRemaining > 0 : false ;
373384
@@ -449,6 +460,17 @@ export default function ProjectDetailPage({ params }: { params: Promise<{ id: st
449460 < Github className = "w-5 h-5 mr-2" />
450461 Repository
451462 </ a >
463+ { project . timelineUrl && (
464+ < a
465+ href = { project . timelineUrl }
466+ target = "_blank"
467+ rel = "noopener noreferrer"
468+ className = "neo-brutal-btn bg-[var(--dsoc-secondary)] text-white"
469+ >
470+ < Calendar className = "w-5 h-5 mr-2" />
471+ Timeline
472+ </ a >
473+ ) }
452474 { project . websiteUrl && (
453475 < a
454476 href = { project . websiteUrl }
@@ -710,6 +732,33 @@ export default function ProjectDetailPage({ params }: { params: Promise<{ id: st
710732 </ p >
711733 </ div >
712734
735+ { project . timelineUrl && (
736+ < div className = "neo-brutal-card p-6 bg-[var(--dsoc-secondary)] text-white border-[var(--dsoc-dark)]" >
737+ < div className = "flex items-start justify-between gap-4" >
738+ < div >
739+ < h3 className = "text-lg font-black flex items-center gap-2" >
740+ < Calendar className = "w-5 h-5" />
741+ Project Timeline
742+ </ h3 >
743+ < p className = "text-sm mt-2 opacity-90" >
744+ See the full schedule, milestones, and key dates before you apply.
745+ </ p >
746+ </ div >
747+ < span className = "inline-flex items-center px-2 py-1 text-xs font-black bg-white text-[var(--dsoc-secondary)] border-2 border-[var(--dsoc-dark)]" >
748+ New
749+ </ span >
750+ </ div >
751+ < a
752+ href = { project . timelineUrl }
753+ target = "_blank"
754+ rel = "noopener noreferrer"
755+ className = "neo-brutal-btn bg-white text-[var(--dsoc-secondary)] w-full mt-4"
756+ >
757+ View Timeline
758+ </ a >
759+ </ div >
760+ ) }
761+
713762 { /* Discord Card */ }
714763 < div className = "neo-brutal-card p-6 dsoc-discord-card" >
715764 < div className = "text-[var(--dsoc-dark)] dark:text-[var(--dsoc-light)]" >
0 commit comments