349349 letter-spacing : 0.1em ;
350350 }
351351
352+ /* Show More Button */
353+ .show-more-container {
354+ text-align : center;
355+ margin : 3rem 0 4rem 0 ;
356+ opacity : 0 ;
357+ animation : fadeIn 0.8s ease forwards 1.2s ;
358+ }
359+
360+ .show-more-btn {
361+ background : rgba (26 , 31 , 58 , 0.6 );
362+ border : 1px solid rgba (0 , 217 , 255 , 0.3 );
363+ color : var (--electric );
364+ padding : 0.8rem 2rem ;
365+ font-family : 'JetBrains Mono' , monospace;
366+ font-size : 0.85rem ;
367+ text-transform : uppercase;
368+ letter-spacing : 0.1em ;
369+ cursor : pointer;
370+ transition : all 0.3s ease;
371+ font-weight : 600 ;
372+ position : relative;
373+ overflow : hidden;
374+ }
375+
376+ .show-more-btn : hover {
377+ background : rgba (26 , 31 , 58 , 0.8 );
378+ border-color : var (--electric );
379+ transform : translateY (-2px );
380+ }
381+
382+ .show-more-btn ::after {
383+ content : '▼' ;
384+ margin-left : 0.5rem ;
385+ transition : transform 0.3s ease;
386+ display : inline-block;
387+ }
388+
389+ .show-more-btn .expanded ::after {
390+ transform : rotate (180deg );
391+ }
392+
393+ /* Additional Projects Section */
394+ .additional-projects {
395+ max-height : 0 ;
396+ overflow : hidden;
397+ transition : max-height 0.5s ease;
398+ }
399+
400+ .additional-projects .expanded {
401+ max-height : 3000px ;
402+ }
403+
404+ .additional-projects .project-card {
405+ opacity : 0 ;
406+ transform : translateY (20px );
407+ animation : none;
408+ }
409+
410+ .additional-projects .expanded .project-card {
411+ animation : slideUp 0.5s ease forwards;
412+ }
413+
414+ .additional-projects .expanded .project-card : nth-child (1 ) { animation-delay : 0.1s ; }
415+ .additional-projects .expanded .project-card : nth-child (2 ) { animation-delay : 0.2s ; }
416+ .additional-projects .expanded .project-card : nth-child (3 ) { animation-delay : 0.3s ; }
417+
352418 footer {
353419 text-align : center;
354420 padding : 3rem 0 ;
@@ -466,10 +532,10 @@ <h1>ARCHIVE</h1>
466532 < span > SYSTEM ACTIVE</ span >
467533 </ div >
468534 < div class ="status-item ">
469- < span > 3 PROJECTS INDEXED</ span >
535+ < span > 0 PROJECTS INDEXED</ span >
470536 </ div >
471537 < div class ="status-item ">
472- < span > LAST UPDATE: 2026 .02.16</ span >
538+ < span > LAST UPDATE: 2024 .02.16</ span >
473539 </ div >
474540 </ div >
475541
@@ -481,8 +547,8 @@ <h1>ARCHIVE</h1>
481547 < article class ="project-card ">
482548 < div class ="project-header ">
483549 < div >
484- < div class ="project-id "> PROJECT-001 </ div >
485- < h2 class ="project-title "> MCP Server for Detection Engineering</ h2 >
550+ < div class ="project-id "> </ div >
551+ < h2 class ="project-title "> MCP Server for Detection Engineering (Security & Anti-Fraud) </ h2 >
486552 </ div >
487553 < span class ="tlp-label tlp-amber "> TLP:AMBER</ span >
488554 </ div >
@@ -515,15 +581,15 @@ <h2 class="project-title">ML Classifier: Hunting Down Bot Email Addresses</h2>
515581 < span class ="tag "> Anti Fraud</ span >
516582 </ div >
517583 < div class ="project-footer ">
518- < a href ="# " class ="project-link "> Details</ a >
584+ < a href ="projects/ml-classifier-hunting-down-bot-email-addresses.html " class ="project-link " target =" _blank "> Details</ a >
519585 < span class ="project-date "> 2025.11</ span >
520586 </ div >
521587 </ article >
522588
523589 < article class ="project-card ">
524590 < div class ="project-header ">
525591 < div >
526- < div class ="project-id "> PROJECT-003 </ div >
592+ < div class ="project-id "> </ div >
527593 < h2 class ="project-title "> AI-Assisted Runtime Detection on GKE (Falco + ADK)</ h2 >
528594 </ div >
529595 < span class ="tlp-label tlp-clear "> TLP:CLEAR</ span >
@@ -549,6 +615,22 @@ <h2 class="project-title">AI-Assisted Runtime Detection on GKE (Falco + ADK)</h2
549615
550616 </ div >
551617
618+ <!-- Show More Button -->
619+ < div class ="show-more-container ">
620+ < button class ="show-more-btn " id ="showMoreBtn " onclick ="toggleProjects() ">
621+ Show More Projects (0)
622+ </ button >
623+ </ div >
624+
625+ <!-- Additional Projects (Hidden by default) -->
626+ < div class ="additional-projects " id ="additionalProjects ">
627+ < div class ="projects-grid ">
628+ <!-- Add more projects here when you have them -->
629+ <!-- Example: Copy a project-card from above and paste here -->
630+
631+ </ div >
632+ </ div >
633+
552634 < footer >
553635 < p > // SECURE COMMUNICATIONS ONLY</ p >
554636 < div class ="contact-links ">
@@ -557,5 +639,92 @@ <h2 class="project-title">AI-Assisted Runtime Detection on GKE (Falco + ADK)</h2
557639 </ div >
558640 </ footer >
559641 </ div >
642+
643+ < script >
644+ // Auto-count projects and update status bar on page load
645+ document . addEventListener ( 'DOMContentLoaded' , function ( ) {
646+ console . log ( 'Script loaded' ) ; // Debug
647+
648+ // Count main projects (only the first projects-grid, not the one inside additionalProjects)
649+ const mainProjectsGrid = document . querySelector ( '.projects-grid' ) ;
650+ const mainProjects = mainProjectsGrid . querySelectorAll ( '.project-card' ) ;
651+ console . log ( 'Main projects found:' , mainProjects . length ) ; // Debug
652+
653+ // Count additional (hidden) projects
654+ const additionalProjects = document . querySelectorAll ( '#additionalProjects .project-card' ) ;
655+ console . log ( 'Additional projects found:' , additionalProjects . length ) ; // Debug
656+
657+ // Total projects
658+ const totalProjects = mainProjects . length + additionalProjects . length ;
659+ console . log ( 'Total projects:' , totalProjects ) ; // Debug
660+
661+ // Update status bar with total count
662+ const statusItems = document . querySelectorAll ( '.status-item' ) ;
663+ console . log ( 'Status items found:' , statusItems . length ) ; // Debug
664+
665+ if ( statusItems . length >= 2 ) {
666+ const countSpan = statusItems [ 1 ] . querySelector ( 'span' ) ;
667+ console . log ( 'Count span found:' , countSpan ) ; // Debug
668+ if ( countSpan ) {
669+ countSpan . textContent = `${ totalProjects } PROJECTS INDEXED` ;
670+ console . log ( 'Updated to:' , countSpan . textContent ) ; // Debug
671+ }
672+ }
673+
674+ // Auto-number all projects
675+ const allProjectCards = document . querySelectorAll ( '.project-card' ) ;
676+ allProjectCards . forEach ( ( card , index ) => {
677+ const projectId = card . querySelector ( '.project-id' ) ;
678+ if ( projectId ) {
679+ const projectNumber = String ( index + 1 ) . padStart ( 3 , '0' ) ;
680+ projectId . textContent = `PROJECT-${ projectNumber } ` ;
681+ }
682+ } ) ;
683+
684+ // Update "Show More" button with additional project count
685+ const showMoreBtn = document . getElementById ( 'showMoreBtn' ) ;
686+ if ( additionalProjects . length > 0 ) {
687+ showMoreBtn . textContent = `Show More Projects (${ additionalProjects . length } )` ;
688+ showMoreBtn . style . display = 'inline-block' ;
689+ } else {
690+ showMoreBtn . style . display = 'none' ;
691+ }
692+
693+ // Get last update date from most recent project
694+ const allProjectDates = document . querySelectorAll ( '.project-date' ) ;
695+ let latestDate = '2024.01.01' ;
696+
697+ allProjectDates . forEach ( dateEl => {
698+ const dateText = dateEl . textContent . trim ( ) ;
699+ if ( dateText > latestDate ) {
700+ latestDate = dateText ;
701+ }
702+ } ) ;
703+
704+ // Update status bar with latest date
705+ if ( statusItems . length >= 3 ) {
706+ const dateSpan = statusItems [ 2 ] . querySelector ( 'span' ) ;
707+ if ( dateSpan ) {
708+ dateSpan . textContent = `LAST UPDATE: ${ latestDate } ` ;
709+ }
710+ }
711+ } ) ;
712+
713+ function toggleProjects ( ) {
714+ const additionalProjects = document . getElementById ( 'additionalProjects' ) ;
715+ const btn = document . getElementById ( 'showMoreBtn' ) ;
716+ const additionalProjectCount = document . querySelectorAll ( '#additionalProjects .project-card' ) . length ;
717+
718+ additionalProjects . classList . toggle ( 'expanded' ) ;
719+ btn . classList . toggle ( 'expanded' ) ;
720+
721+ if ( additionalProjects . classList . contains ( 'expanded' ) ) {
722+ btn . textContent = 'Show Less' ;
723+ } else {
724+ btn . textContent = `Show More Projects (${ additionalProjectCount } )` ;
725+ }
726+ }
727+ </ script >
728+
560729</ body >
561730</ html >
0 commit comments