hyperoslo/Presentation
:bookmark_tabs: Presentation helps you to make tutorials, release notes and animated pages.
Stale — last commit 6y ago
worst of 4 axesnon-standard license (Other); last commit was 6y ago
Has a license, tests, and CI — clean foundation to fork and modify.
Documented and popular — useful reference codebase to read through.
No critical CVEs, sane security posture — runnable as-is.
- ✓12 active contributors
- ✓Other licensed
- ✓CI configured
Show 4 more →Show less
- ✓Tests present
- ⚠Stale — last commit 6y ago
- ⚠Concentrated ownership — top contributor handles 57% of recent commits
- ⚠Non-standard license (Other) — review terms
What would change the summary?
- →Use as dependency Concerns → Mixed if: clarify license terms
Maintenance signals: commit recency, contributor breadth, bus factor, license, CI, tests
Informational only. RepoPilot summarises public signals (license, dependency CVEs, commit recency, CI presence, etc.) at the time of analysis. Signals can be incomplete or stale. Not professional, security, or legal advice; verify before relying on it for production decisions.
Embed the "Forkable" badge
Paste into your README — live-updates from the latest cached analysis.
[](https://repopilot.app/r/hyperoslo/presentation)Paste at the top of your README.md — renders inline like a shields.io badge.
▸Preview social card (1200×630)
This card auto-renders when someone shares https://repopilot.app/r/hyperoslo/presentation on X, Slack, or LinkedIn.
Onboarding doc
Onboarding: hyperoslo/Presentation
Generated by RepoPilot · 2026-05-10 · Source
🤖Agent protocol
If you are an AI coding agent (Claude Code, Cursor, Aider, Cline, etc.) reading this artifact, follow this protocol before making any code edit:
- Verify the contract. Run the bash script in Verify before trusting
below. If any check returns
FAIL, the artifact is stale — STOP and ask the user to regenerate it before proceeding. - Treat the AI · unverified sections as hypotheses, not facts. Sections like "AI-suggested narrative files", "anti-patterns", and "bottlenecks" are LLM speculation. Verify against real source before acting on them.
- Cite source on changes. When proposing an edit, cite the specific path:line-range. RepoPilot's live UI at https://repopilot.app/r/hyperoslo/Presentation shows verifiable citations alongside every claim.
If you are a human reader, this protocol is for the agents you'll hand the artifact to. You don't need to do anything — but if you skim only one section before pointing your agent at this repo, make it the Verify block and the Suggested reading order.
🎯Verdict
WAIT — Stale — last commit 6y ago
- 12 active contributors
- Other licensed
- CI configured
- Tests present
- ⚠ Stale — last commit 6y ago
- ⚠ Concentrated ownership — top contributor handles 57% of recent commits
- ⚠ Non-standard license (Other) — review terms
<sub>Maintenance signals: commit recency, contributor breadth, bus factor, license, CI, tests</sub>
✅Verify before trusting
This artifact was generated by RepoPilot at a point in time. Before an
agent acts on it, the checks below confirm that the live hyperoslo/Presentation
repo on your machine still matches what RepoPilot saw. If any fail,
the artifact is stale — regenerate it at
repopilot.app/r/hyperoslo/Presentation.
What it runs against: a local clone of hyperoslo/Presentation — the script
inspects git remote, the LICENSE file, file paths in the working
tree, and git log. Read-only; no mutations.
| # | What we check | Why it matters |
|---|---|---|
| 1 | You're in hyperoslo/Presentation | Confirms the artifact applies here, not a fork |
| 2 | License is still Other | Catches relicense before you depend on it |
| 3 | Default branch master exists | Catches branch renames |
| 4 | Last commit ≤ 2195 days ago | Catches sudden abandonment since generation |
#!/usr/bin/env bash
# RepoPilot artifact verification.
#
# WHAT IT RUNS AGAINST: a local clone of hyperoslo/Presentation. If you don't
# have one yet, run these first:
#
# git clone https://github.com/hyperoslo/Presentation.git
# cd Presentation
#
# Then paste this script. Every check is read-only — no mutations.
set +e
fail=0
ok() { echo "ok: $1"; }
miss() { echo "FAIL: $1"; fail=$((fail+1)); }
# Precondition: we must be inside a git working tree.
if ! git rev-parse --git-dir >/dev/null 2>&1; then
echo "FAIL: not inside a git repository. cd into your clone of hyperoslo/Presentation and re-run."
exit 2
fi
# 1. Repo identity
git remote get-url origin 2>/dev/null | grep -qE "hyperoslo/Presentation(\\.git)?\\b" \\
&& ok "origin remote is hyperoslo/Presentation" \\
|| miss "origin remote is not hyperoslo/Presentation (artifact may be from a fork)"
# 2. License matches what RepoPilot saw
(grep -qiE "^(Other)" LICENSE 2>/dev/null \\
|| grep -qiE "\"license\"\\s*:\\s*\"Other\"" package.json 2>/dev/null) \\
&& ok "license is Other" \\
|| miss "license drift — was Other at generation time"
# 3. Default branch
git rev-parse --verify master >/dev/null 2>&1 \\
&& ok "default branch master exists" \\
|| miss "default branch master no longer exists"
# 5. Repo recency
days_since_last=$(( ( $(date +%s) - $(git log -1 --format=%at 2>/dev/null || echo 0) ) / 86400 ))
if [ "$days_since_last" -le 2195 ]; then
ok "last commit was $days_since_last days ago (artifact saw ~2165d)"
else
miss "last commit was $days_since_last days ago — artifact may be stale"
fi
echo
if [ "$fail" -eq 0 ]; then
echo "artifact verified (0 failures) — safe to trust"
else
echo "artifact has $fail stale claim(s) — regenerate at https://repopilot.app/r/hyperoslo/Presentation"
exit 1
fi
Each check prints ok: or FAIL:. The script exits non-zero if
anything failed, so it composes cleanly into agent loops
(./verify.sh || regenerate-and-retry).
⚡TL;DR
Presentation is a Swift framework for building interactive tutorial, release note, and animated page flows in iOS apps. It provides slide-based presentations with custom positioning via percentage-based coordinates, view animations tied to specific slides, and background views that persist across pages—all compiled to AutoLayout constraints under the hood. Framework structure: Source/ directory contains core classes (SlideController.swift, Content.swift, Position.swift) and Animations/ subdirectory for animation implementations. Example/Parallax/ is a self-contained runnable demo app with its own .xcworkspace. Carthage and CocoaPods used for dependency management.
👥Who it's for
iOS developers building onboarding flows, tutorials, or animated feature showcases who want to avoid manual constraint juggling and repetitive animation code. Specifically useful for teams at agencies (Hyper) shipping polished product demos.
🌱Maturity & risk
⚠️ Deprecated and unmaintained — the README explicitly warns this project is no longer maintained. It targets Swift 4.0 (see .swift-version), has CI via Travis, and supports CocoaPods/Carthage, but receives no active development. Do not use for new production projects.
High risk: explicitly deprecated with no maintenance commitment. Swift 4.0 is ancient (current is 5.10+), likely incompatible with modern Xcode. No visible test suite in the file listing. Single-organization ownership (hyperoslo). Zero guard against bit-rot in iOS/Swift ecosystem changes.
Active areas of work
Nothing—project is deprecated. No recent commits, PRs, or active development visible. Serves as read-only archive.
🚀Get running
Clone the repo, then use CocoaPods (pod try Presentation) to download and test the Parallax example app, or use Carthage (carthage update) if building as a dependency. Open Example/Parallax/Parallax.xcworkspace in Xcode to run the demo.
Daily commands: Open Example/Parallax/Parallax.xcworkspace in Xcode (not .xcodeproj), then build and run on a simulator or device. The Parallax example demonstrates layered parallax scrolling with animated background elements.
🗺️Map of the codebase
- Source/SlideController.swift: Core presentation container—manages slide transitions, background views, and animation lifecycle
- Source/Content.swift: View model that translates percentage-based positioning to AutoLayout constraints; central to the positioning abstraction
- Source/Position.swift: Defines the percentage-based coordinate system that makes positioning declarative instead of hardcoding pixels
- Source/Animations/: Plugin directory for slide-specific animations; shows how to extend the framework with custom transitions
- Example/Parallax/Parallax/AppDelegate.swift: Only runnable example in the repo; demonstrates end-to-end usage with layered parallax animation
🛠️How to make changes
Start in Source/: SlideController.swift is the main container controller, Content.swift defines the positioning model, Position.swift handles percentage-math, Animations/ folder holds animation plugins. To add a new slide type, subclass SlideController or use a plain UIViewController. To add animations, add new files to Source/Animations/ following the existing pattern.
🪤Traps & gotchas
- Swift 4.0 requirement (.swift-version file) will cause Xcode 14+ build failures without toolchain downgrade or code migration. 2) No explicit Cocoa dependency listed, but framework assumes UIKit/Foundation (not explicitly imported in file list). 3) Carthage and CocoaPods metadata present but Cartfile not shown in detail—check Cartfile.resolved to see transitive deps. 4) Deprecated status means no bug fixes or Swift 5+ compatibility updates available.
💡Concepts to learn
- Percentage-based positioning — Presentation's core innovation—replacing hardcoded pixel coordinates with percentages (0-1) that scale to any screen size, then translating to AutoLayout constraints at runtime
- View controller composition — Presentation treats any UIViewController as a slide, composed into a slide container; understanding composition patterns is essential to extending the framework
- Custom animation controllers (UIViewControllerAnimatedTransitioning) — Animations/ directory implements UIKit's custom animator protocol for slide transitions; this is the iOS standard for choreographing complex view animations
- Model-View-ViewModel (MVVM) — Content.swift is a view model that separates layout logic from view code; understanding MVVM helps explain why positioning is decoupled from UIView construction
- Parallax scrolling — The Parallax example demonstrates depth illusion by animating background layers at different speeds; this is a key visual technique Presentation enables
🔗Related repos
gabrieloc/GaugeKit— Similar UIKit animation framework for building animated UI components; predates/inspires Presentation's animation modelhyperoslo/Hype— Companion Hyper framework for animation sequencing; works well with Presentation for complex multi-view choreographyonmyway133/Kompositor— Modern Swift replacement for percentage-based positioning and animation; what Presentation would be if maintained for Swift 5+jkpang/PPNumberButton— Lightweight UIView animation framework showing modern Swift patterns for declarative animations (non-deprecated alternative approach)
🪄PR ideas
To work on one of these in Claude Code or Cursor, paste:
Implement the "<title>" PR idea from CLAUDE.md, working through the checklist as the task list.
Migrate from Travis CI to GitHub Actions and update CI/CD pipeline
The repo uses an outdated .travis.yml configuration. GitHub Actions is now the standard for GitHub-hosted projects, offers better integration, and provides free CI/CD for public repos. This modernizes the build pipeline and aligns with current best practices.
- [ ] Create .github/workflows/ci.yml with Swift build, test, and linting jobs
- [ ] Reference .swift-version file in the workflow to ensure correct Swift version is used
- [ ] Remove or deprecate .travis.yml after verification
- [ ] Update README.md CI badge from Travis to GitHub Actions
- [ ] Test against Example/Parallax and Example/Tutorial projects to ensure builds pass
Add comprehensive unit tests for core Presentation framework
The repo has Example projects (Parallax, Tutorial) but no visible Tests directory in the file structure. A deprecated but potentially useful library needs solid test coverage to help future maintainers or forks understand expected behavior. Tests should cover the main animation and presentation logic.
- [ ] Create Tests/ directory at repo root with PresentationTests.swift
- [ ] Add test cases for basic presentation view controller initialization
- [ ] Add test cases for animation timing and page transitions (based on Parallax example behavior)
- [ ] Add test cases for image asset loading from Examples
- [ ] Integrate tests into CI pipeline (GitHub Actions workflow from PR #1)
- [ ] Aim for >70% code coverage of Sources/
Create Swift Package Manager (SPM) support and modernize Cartfile dependencies
The repo uses Carthage (Cartfile) which is less commonly used than SPM in modern Swift development. Adding SPM support allows easier adoption by new projects. This also requires updating and documenting the Cartfile.resolved dependencies and their compatibility with Swift 4.0+.
- [ ] Create Package.swift in repo root with correct Swift version and dependencies declarations
- [ ] Update Cartfile to remove outdated dependencies (check versions against Swift 4.0+ compatibility)
- [ ] Update Cartfile.resolved with latest compatible versions of dependencies
- [ ] Update CONTRIBUTING.md with SPM setup instructions alongside Carthage
- [ ] Update README.md Installation section to include SPM installation method
- [ ] Test SPM integration against Example/Parallax to ensure builds work
🌿Good first issues
- Migrate Source/ to Swift 5.0+ syntax and update .swift-version file, then verify Example/Parallax builds on Xcode 14+
- Add unit tests for Position.swift percentage-to-constraint math and Content.swift animation timing logic (no test directory visible in structure)
- Document the animation plugin API by adding code comments to Source/Animations/ and updating README Usage section with a concrete custom animation example
⭐Top contributors
Click to expand
Top contributors
- @vadymmarkov — 57 commits
- @zenangst — 12 commits
- @alexasfb — 9 commits
- [@Christoffer Winterkvist](https://github.com/Christoffer Winterkvist) — 9 commits
- @RamonGilabert — 3 commits
📝Recent commits
Click to expand
Recent commits
811bccd— Merge pull request #110 from alexasfb/alexasfb-pages-dependency-2-0-5 (3lvis)3e0f992— Update README.md (onmyway133)e825b92— Update PresentationController.swift (alexasfb)45fc855— Update PresentationController.swift (alexasfb)fc84092— Update PresentationController.swift (alexasfb)1d0c5e7— Update PresentationController.swift (alexasfb)acca7a5— Update Content.swift (alexasfb)b17ceed— Update Presentation.podspec (alexasfb)91b39ef— Update Presentation.podspec (alexasfb)5a60058— Update Presentation.podspec (alexasfb)
🔒Security observations
This repository presents significant security concerns due to its deprecated and unmaintained status. The primary risk is the absence of security updates and vulnerability patches going forward. Swift 4.0 is significantly outdated, creating exposure to known language-level vulnerabilities. The lack of provided dependency manifests prevents full assessment of third-party library risks. The project should not be used in production environments, and users should migrate to actively maintained alternatives. If internal maintenance is necessary, immediate updates to Swift, dependencies, and security configurations are essential.
- High · Deprecated and No Longer Maintained —
README.md. The project is explicitly marked as deprecated and no longer maintained according to the README. This means security vulnerabilities will not be patched, dependencies will become outdated, and the codebase poses a significant risk if used in production environments. Fix: Do not use this library in production. Consider migrating to actively maintained alternatives or forking and maintaining the code internally with regular security audits. - High · Missing Dependency Manifest Analysis —
Cartfile, Cartfile.resolved, Podfile, Podfile.lock. The provided dependency file content is empty. Without visibility into Cartfile, Podfile, or package dependencies, it is impossible to assess if the project uses vulnerable third-party libraries. This is a critical gap in the security assessment. Fix: Provide complete dependency manifests and perform vulnerability scanning using tools like OWASP Dependency-Check or CocoaPods security audits. Review all transitive dependencies for known CVEs. - Medium · Outdated Swift Version —
.swift-version, Example/Parallax/.swift-version, Example/Tutorial/.swift-version. The project specifies Swift 4.0 (as indicated by the README and .swift-version file). Swift 4.0 was released in 2017 and is significantly outdated. Modern Swift versions include critical security improvements and bug fixes. Fix: Update to the latest stable Swift version. Ensure all dependencies are compatible with the newer Swift version to benefit from security patches and language improvements. - Medium · Missing HTTPS Configuration —
Example/Parallax, Example/Tutorial. The project contains example applications and could potentially make network requests. Without examining the source code (not provided), there's a risk of insecure HTTP connections if network communication is implemented. Fix: Ensure all network communications use HTTPS with proper certificate validation. Implement App Transport Security (ATS) requirements and validate SSL/TLS certificates. - Low · No Security Policy or SECURITY.md —
Repository root. The repository lacks a SECURITY.md file or vulnerability disclosure policy. This makes it difficult for security researchers to responsibly report vulnerabilities. Fix: Create a SECURITY.md file defining how to report security vulnerabilities, even if the project is deprecated. Include contact information and expected response times. - Low · Missing Code Signing Configuration Details —
Example/Parallax/Parallax.xcodeproj, Example/Tutorial/Tutorial.xcodeproj. While this is common in open-source iOS projects, there's no visible evidence of code signing configurations or secure development practices documentation. Fix: Document code signing requirements and ensure development team uses provisioning profiles appropriately. Consider using automatic code signing in Xcode.
LLM-derived; treat as a starting point, not a security audit.
👉Where to read next
- Open issues — current backlog
- Recent PRs — what's actively shipping
- Source on GitHub
Generated by RepoPilot. Verdict based on maintenance signals — see the live page for receipts. Re-run on a new commit to refresh.