| name | unisecurityguard-academic-whistleblower-archive |
| description | Archive and documentation platform for academic employment transparency and whistleblowing in Chinese higher education institutions |
| triggers | ["how do I archive academic whistleblowing content","set up a backup platform for censored social media","document academic employment issues","preserve evidence of institutional misconduct","create a GitHub-based content archive","backup xiaohongshu or red book content","archive screenshots and testimonials safely","document academic career transparency"] |
UniSecurityGuard Academic Whistleblower Archive
Skill by ara.so โ Security Skills collection.
Overview
UniSecurityGuard is a GitHub-based archive platform documenting the experience of a Chinese academic who transitioned from associate professor to security guard. The project serves as a censorship-resistant backup for social media content that faces institutional pressure and platform removal. It demonstrates how to use GitHub as a transparent, immutable documentation platform for whistleblowing and advocacy.
Key Use Case: Preserving evidence of academic employment issues, institutional misconduct, and career transitions when primary platforms (Xiaohongshu/Little Red Book) are threatened with censorship.
Primary Language: Markdown (documentation-focused)
Repository Structure:
- README.md: Main narrative and updates
- assets/: Screenshots and image evidence
- Issues section: Community Q&A and documentation
Installation & Setup
Fork or Clone for Your Own Archive
git clone https://github.com/UniSecurityGuard/UniSecurityGuard.git
cd UniSecurityGuard
git clone https://github.com/YOUR_USERNAME/YOUR_ARCHIVE_NAME.git
cd YOUR_ARCHIVE_NAME
Initialize Your Own Archive
mkdir -p assets/{screenshots,documents,evidence}
touch README.md
touch TIMELINE.md
touch FAQ.md
git init
git add .
git commit -m "Initial archive setup"
git remote add origin https://github.com/YOUR_USERNAME/YOUR_ARCHIVE.git
git branch -M main
git push -u origin main
Core Patterns
1. Document Progressive Updates
The project uses the README.md as a chronological narrative with new updates at the top:
# [Latest Update - Critical Situation]
## [Date]: Current Status
Description of latest developments...
## [Earlier Date]: Previous Situation
Earlier context...
## Background
Original story and context...
2. Asset Organization
Store evidence systematically:
assets/
โโโ screenshots/
โ โโโ 1.jpg
โ โโโ 2.jpg
โ โโโ 3.jpg
โโโ documents/
โ โโโ contract.pdf
โ โโโ correspondence.pdf
โโโ evidence/
โโโ salary_records/
โโโ institutional_communications/
3. Embed Images in README
## Evidence Documentation
<img src="assets/screenshots/1.jpg" width="400" alt="Description of evidence">
<img src="assets/screenshots/2.jpg" width="400" alt="Context">
<img src="assets/screenshots/3.jpg" width="400" alt="Timeline proof">
4. Use Issues for FAQ and Community Support
The project uses 154+ issues as a documentation and Q&A system:
# Create structured issues for common questions
Issue #1: "ๅ
ณไบๅญฆๆ กๆฝๅ็่ฏฆ็ปๆ
ๅต" (Details about institutional pressure)
Issue #2: "ๅฆไฝไฟๆค่ชๅทฑๅจ็ฑปไผผๆ
ๅตไธ" (How to protect yourself in similar situations)
Issue #3: "ๆณๅพๅปบ่ฎฎๅ่ตๆบ" (Legal advice and resources)
Real-World Implementation Examples
Example 1: Creating a Censorship-Resistant Archive
#!/bin/bash
ARCHIVE_DIR="./archive/$(date +%Y-%m-%d)"
mkdir -p "$ARCHIVE_DIR"
cp ~/Downloads/xiaohongshu_screenshots/* "$ARCHIVE_DIR/"
cat > "$ARCHIVE_DIR/update.md" << EOF
# Update: $(date +%Y-%m-%d)
## Status
- Platform status: [Active/Restricted/Removed]
- Follower count: [NUMBER]
- Content removed: [YES/NO]
## New Developments
[Description]
## Evidence
$(ls "$ARCHIVE_DIR"/*.jpg | sed 's/^/- /')
EOF
git add "$ARCHIVE_DIR"
git commit -m "Archive update: $(date +%Y-%m-%d)"
git push origin main
Example 2: Structured Timeline Documentation
Create TIMELINE.md:
# Career Transition Timeline
## 2025-12-27: Repository Created
- Initial backup platform established
- 3 key screenshots archived
- Background story documented
## 2025-12: Institutional Pressure Begins
- 7 leaders visit rental apartment
- Demands to delete content and claim fiction
- Threats to reclaim salary and benefits
## 2025: Security Guard Transition
- Removed from associate professor position
- Transferred to campus security
- Salary: ยฅ4,000/month base + ยฅ800 security supplement
- Annual performance bonus: ยฅ6,000+
## Background: Academic Career
- Undergraduate: C9 university (ๅไบ)
- PhD: QS50 US university (withdrawn)
- Position: Associate professor at brother institution
Example 3: README Template for Academic Whistleblowing
# [Project Title]: Academic Employment Transparency
## โ ๏ธ Current Situation
[Latest critical update - always at top]
## Background
### Academic Credentials
- Undergraduate: [Institution]
- Graduate: [Institution]
- Position: [Title] at [Institution]
### Employment Transition
- Previous role: [Title], Salary: [Amount]
- Current role: [Title], Salary: [Amount]
- Reason for transition: [Description]
## Institutional Response
### Pressure Tactics
1. [Specific action]
2. [Specific threat]
3. [Specific demand]
### Evidence
<img src="assets/evidence_1.jpg" width="400" alt="Evidence description">
## Documentation Purpose
This repository serves as:
1. Immutable record of events
2. Backup for censored social media content
3. Resource for others in similar situations
4. Transparent accountability mechanism
## How to Support
- โญ Star this repository for visibility
- ๐ Open issues with questions or similar experiences
- ๐ Share (carefully, considering safety)
- ๐ธ Screenshot and archive content locally
Example 4: Automated Git Backup Script
import os
import json
from datetime import datetime
import subprocess
class AcademicArchive:
def __init__(self, repo_path):
self.repo_path = repo_path
self.assets_dir = os.path.join(repo_path, 'assets')
def add_update(self, title, content, evidence_files=None):
"""Add new update to README"""
timestamp = datetime.now().strftime('%Y-%m-%d %H:%M')
update = f"\n# {title}\n\n"
update += f"**Date**: {timestamp}\n\n"
update += f"{content}\n\n"
if evidence_files:
update += "## Evidence\n\n"
for f in evidence_files:
dest = os.path.join(self.assets_dir, os.path.basename(f))
subprocess.run(['cp', f, dest])
update += f'<img src="assets/{os.path.basename(f)}" width="400" alt="">\n'
readme_path = os.path.join(self.repo_path, 'README.md')
with open(readme_path, 'r') f:
existing = f.read()
(readme_path, ) f:
f.write(update + existing)
update
():
os.chdir(.repo_path)
subprocess.run([, , ])
subprocess.run([, , , message])
subprocess.run([, , , ])
():
subprocess.run([
, , ,
, question,
, answer,
,
])
archive = AcademicArchive()
archive.add_update(
title=,
content=,
evidence_files=[
,
]
)
archive.commit_and_push()
Configuration & Best Practices
Repository Settings
-
Enable GitHub Pages (optional, for web presence):
- Settings โ Pages โ Source: main branch
- Creates public website at
https://USERNAME.github.io/REPO
-
Issue Templates:
Create .github/ISSUE_TEMPLATE/faq.md:
---
name: FAQ Question
about: Ask questions about the situation
title: '[FAQ] '
labels: faq
---
## Question
[Your question]
## Context (if applicable)
[Additional context]
- Archive Metadata:
Create archive_metadata.json:
{
"archive_name": "UniSecurityGuard",
"primary_platform": "Xiaohongshu (Little Red Book)",
"backup_date": "2025-12-27",
"last_update": "2026-05-13",
"status": "active",
"content_type": "academic_whistleblowing",
"language": "zh-CN",
"evidence_count": 154,
"follower_snapshot": {
"platform": "xiaohongshu",
"count": "unknown",
"status": "threatened"
}
}
Safety Considerations
-
Anonymization: Remove or redact:
- Personal identifying information of third parties
- Specific institutional names (if legally required)
- Location details that enable physical tracking
-
Evidence Integrity:
sha256sum assets/**/*.jpg > assets/checksums.txt
git add assets/checksums.txt
git commit -m "Add evidence checksums for integrity verification"
-
Backup Beyond GitHub:
tar -czf archive_backup.tar.gz .
gpg --symmetric --cipher-algo AES256 archive_backup.tar.gz
Common Use Cases
Migrating from Censored Platform
## Platform Migration Notice
Due to [PLATFORM] censorship/removal, this content has migrated to GitHub.
**Original platform**: [NAME]
**Original account**: [HANDLE/ID]
**Migration date**: [DATE]
**Reason**: [Platform pressure/content removal/account suspension]
### How to Follow Updates
1. โญ Star this repository
2. ๐๏ธ Watch โ All Activity (for notifications)
3. Check back regularly or use RSS feed:
`https://github.com/USERNAME/REPO/commits/main.atom`
Community Support Hub
## Support & Resources
### For Those in Similar Situations
- ๐ [FAQ Issues](https://github.com/USERNAME/REPO/issues?q=label%3Afaq)
- ๐ฌ [Discussions](https://github.com/USERNAME/REPO/discussions)
- ๐ [Resource List](./RESOURCES.md)
### Legal & Safety Resources
- [Labor law consultation contacts]
- [Academic employment advocacy organizations]
- [Digital security guides]
Troubleshooting
Issue: Content Visibility
Problem: Updates not appearing to others
git status
git log --oneline -5
git push --force origin main
Issue: Large Files
Problem: Screenshots/documents exceed GitHub limits (100MB file, 1GB repo)
git lfs install
git lfs track "*.pdf"
git lfs track "*.mp4"
git add .gitattributes
git commit -m "Configure Git LFS"
echo "Large evidence files: [External Archive Link]" >> README.md
Issue: Institutional Takedown Requests
GitHub provides:
- DMCA counter-notice process
- Transparency reports for takedown requests
- Archive repositories before potential removal
git clone --mirror https://github.com/USERNAME/REPO.git
cd REPO.git
git push --mirror https://gitlab.com/USERNAME/REPO.git
git push --mirror https://codeberg.org/USERNAME/REPO.git
Issue: Community Management
High issue volume (154+ issues):
gh label create "institutional-pressure" --color "d73a4a"
gh label create "legal-advice" --color "0075ca"
gh label create "career-advice" --color "008672"
gh issue list --limit 100 --json number --jq '.[].number' | \
xargs -I {} gh issue edit {} --add-label "faq"
Advanced Patterns
Automated Monitoring
import requests
import json
from datetime import datetime
def check_platform_status(platform_url):
"""Monitor if content is still accessible"""
try:
response = requests.get(platform_url, timeout=10)
status = {
'timestamp': datetime.now().isoformat(),
'accessible': response.status_code == 200,
'status_code': response.status_code
}
except Exception as e:
status = {
'timestamp': datetime.now().isoformat(),
'accessible': False,
'error': str(e)
}
with open('platform_status.jsonl', 'a') as f:
f.write(json.dumps(status) + '\n')
return status
RSS Feed for Followers
GitHub automatically provides RSS feeds:
# Commits feed
https://github.com/USERNAME/REPO/commits/main.atom
# Issues feed
https://github.com/USERNAME/REPO/issues.atom
# Share with followers
"Subscribe to updates: Add this URL to your RSS reader"
This skill enables AI agents to help users create censorship-resistant documentation platforms, archive evidence of institutional misconduct, and maintain transparency when facing content removal pressure.