Skip to content

Commit cf21c48

Browse files
Merge pull request #11 from ContextLab/issue-9-news-feed
Add news feed, sync CV trainees, and improve people page
2 parents f69bd2a + efa64a6 commit cf21c48

26 files changed

+2742
-74
lines changed

.github/workflows/build-content.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,6 @@ jobs:
6262
run: |
6363
git config user.name 'github-actions[bot]'
6464
git config user.email 'github-actions[bot]@users.noreply.github.com'
65-
git add publications.html people.html software.html
65+
git add publications.html people.html software.html news.html
6666
git commit -m "Auto-build: Update content pages from spreadsheet data"
6767
git push

css/style.css

Lines changed: 287 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -509,6 +509,246 @@ hr, .divider {
509509
color: var(--primary-green);
510510
}
511511

512+
/* News + Bluesky Two-Column Layout */
513+
.news-bluesky-container {
514+
display: grid;
515+
grid-template-columns: 2fr 1fr;
516+
gap: 40px;
517+
align-items: start;
518+
}
519+
520+
.news-bluesky-container .news-section {
521+
margin: 0;
522+
}
523+
524+
/* Bluesky Feed Section */
525+
.bluesky-section {
526+
position: sticky;
527+
top: 20px;
528+
border-left: 1px solid var(--accent-green);
529+
padding-left: 40px;
530+
}
531+
532+
.bluesky-section h2 {
533+
font-size: 18px;
534+
line-height: 1.6;
535+
color: var(--primary-green-light);
536+
letter-spacing: 0.4px;
537+
margin-bottom: 20px;
538+
}
539+
540+
.bluesky-feed {
541+
max-width: 100%;
542+
max-height: 800px;
543+
overflow-y: auto;
544+
}
545+
546+
/* Scrollbar styling for Bluesky feed */
547+
.bluesky-feed::-webkit-scrollbar {
548+
width: 6px;
549+
}
550+
551+
.bluesky-feed::-webkit-scrollbar-track {
552+
background: var(--bg-green-light);
553+
border-radius: 3px;
554+
}
555+
556+
.bluesky-feed::-webkit-scrollbar-thumb {
557+
background: var(--accent-green);
558+
border-radius: 3px;
559+
}
560+
561+
.bluesky-feed::-webkit-scrollbar-thumb:hover {
562+
background: var(--primary-green-light);
563+
}
564+
565+
.bluesky-loading,
566+
.bluesky-empty,
567+
.bluesky-error {
568+
color: var(--primary-green-light);
569+
font-size: 14px;
570+
text-align: center;
571+
padding: 20px;
572+
}
573+
574+
.bluesky-posts {
575+
display: flex;
576+
flex-direction: column;
577+
gap: 20px;
578+
}
579+
580+
.bluesky-post {
581+
background: var(--white);
582+
border-radius: 8px;
583+
padding: 20px;
584+
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
585+
}
586+
587+
.bluesky-post-header {
588+
display: flex;
589+
justify-content: space-between;
590+
align-items: flex-start;
591+
margin-bottom: 12px;
592+
}
593+
594+
.bluesky-author {
595+
display: flex;
596+
align-items: center;
597+
gap: 10px;
598+
text-decoration: none;
599+
}
600+
601+
.bluesky-author:hover {
602+
text-decoration: none;
603+
}
604+
605+
.bluesky-avatar {
606+
width: 40px;
607+
height: 40px;
608+
border-radius: 50%;
609+
object-fit: cover;
610+
}
611+
612+
.bluesky-author-info {
613+
display: flex;
614+
flex-direction: column;
615+
}
616+
617+
.bluesky-display-name {
618+
font-weight: 600;
619+
color: var(--dark-text);
620+
font-size: 14px;
621+
}
622+
623+
.bluesky-handle {
624+
color: var(--primary-green-light);
625+
font-size: 12px;
626+
}
627+
628+
.bluesky-post-date {
629+
color: var(--primary-green-light);
630+
font-size: 12px;
631+
text-decoration: none;
632+
}
633+
634+
.bluesky-post-date:hover {
635+
text-decoration: underline;
636+
}
637+
638+
.bluesky-post-content p {
639+
font-size: 14px;
640+
line-height: 1.6;
641+
color: var(--dark-text);
642+
margin-bottom: 12px;
643+
white-space: pre-wrap;
644+
word-break: break-word;
645+
}
646+
647+
.bluesky-post-content p:last-child {
648+
margin-bottom: 0;
649+
}
650+
651+
.bluesky-post-content a {
652+
color: var(--primary-green);
653+
word-break: break-all;
654+
}
655+
656+
.bluesky-post-images {
657+
display: grid;
658+
grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
659+
gap: 8px;
660+
margin-top: 12px;
661+
}
662+
663+
.bluesky-post-image {
664+
width: 100%;
665+
border-radius: 8px;
666+
object-fit: cover;
667+
max-height: 300px;
668+
}
669+
670+
.bluesky-link-card {
671+
display: flex;
672+
border: 1px solid var(--accent-green);
673+
border-radius: 8px;
674+
overflow: hidden;
675+
margin-top: 12px;
676+
text-decoration: none;
677+
transition: border-color 0.2s ease;
678+
}
679+
680+
.bluesky-link-card:hover {
681+
border-color: var(--primary-green);
682+
text-decoration: none;
683+
}
684+
685+
.bluesky-link-thumb {
686+
width: 120px;
687+
height: 80px;
688+
object-fit: cover;
689+
flex-shrink: 0;
690+
}
691+
692+
.bluesky-link-info {
693+
padding: 10px 12px;
694+
display: flex;
695+
flex-direction: column;
696+
justify-content: center;
697+
overflow: hidden;
698+
}
699+
700+
.bluesky-link-title {
701+
font-size: 13px;
702+
font-weight: 600;
703+
color: var(--dark-text);
704+
display: -webkit-box;
705+
-webkit-line-clamp: 1;
706+
-webkit-box-orient: vertical;
707+
overflow: hidden;
708+
}
709+
710+
.bluesky-link-description {
711+
font-size: 12px;
712+
color: var(--primary-green-light);
713+
display: -webkit-box;
714+
-webkit-line-clamp: 2;
715+
-webkit-box-orient: vertical;
716+
overflow: hidden;
717+
margin-top: 4px;
718+
}
719+
720+
.bluesky-post-footer {
721+
display: flex;
722+
gap: 20px;
723+
margin-top: 12px;
724+
padding-top: 12px;
725+
border-top: 1px solid var(--accent-green);
726+
}
727+
728+
.bluesky-stat {
729+
display: flex;
730+
align-items: center;
731+
gap: 5px;
732+
color: var(--primary-green-light);
733+
font-size: 13px;
734+
text-decoration: none;
735+
transition: color 0.2s ease;
736+
}
737+
738+
.bluesky-stat:hover {
739+
color: var(--primary-green);
740+
text-decoration: none;
741+
}
742+
743+
.bluesky-stat svg {
744+
flex-shrink: 0;
745+
}
746+
747+
.bluesky-follow {
748+
text-align: center;
749+
margin-top: 25px;
750+
}
751+
512752
/* Software List */
513753
.software-section h2 {
514754
display: flex;
@@ -1457,6 +1697,12 @@ body.homepage .site-header {
14571697
margin: 0 auto 20px;
14581698
}
14591699

1700+
/* Jump links - allow wrapping on mobile */
1701+
.jump-links {
1702+
white-space: normal;
1703+
line-height: 1.8;
1704+
}
1705+
14601706
/* Footer navigation - mobile layout (hamburger menu style) */
14611707
.footer-nav {
14621708
padding: 12px 0;
@@ -1529,6 +1775,47 @@ body.homepage .site-header {
15291775
display: block;
15301776
text-align: center;
15311777
}
1778+
1779+
/* News + Bluesky - stack on mobile */
1780+
.news-bluesky-container {
1781+
grid-template-columns: 1fr;
1782+
}
1783+
1784+
.bluesky-section {
1785+
position: static;
1786+
margin-top: 40px;
1787+
border-left: none;
1788+
border-top: 1px solid var(--accent-green);
1789+
padding-left: 0;
1790+
padding-top: 30px;
1791+
}
1792+
1793+
.bluesky-feed {
1794+
max-height: 500px;
1795+
}
1796+
1797+
/* Bluesky feed - mobile adjustments */
1798+
.bluesky-post {
1799+
padding: 15px;
1800+
}
1801+
1802+
.bluesky-post-header {
1803+
flex-direction: column;
1804+
gap: 8px;
1805+
}
1806+
1807+
.bluesky-post-date {
1808+
align-self: flex-start;
1809+
}
1810+
1811+
.bluesky-link-card {
1812+
flex-direction: column;
1813+
}
1814+
1815+
.bluesky-link-thumb {
1816+
width: 100%;
1817+
height: 120px;
1818+
}
15321819
}
15331820

15341821
/* Utility Classes */

data/news.xlsx

7.33 KB
Binary file not shown.

data/people.xlsx

6.43 KB
Binary file not shown.

0 commit comments

Comments
 (0)