homepage
This commit is contained in:
parent
d6006a0227
commit
70671e5a43
17 changed files with 519 additions and 14 deletions
94
.github/workflows/docker.yml
vendored
Normal file
94
.github/workflows/docker.yml
vendored
Normal file
|
@ -0,0 +1,94 @@
|
||||||
|
name: docker
|
||||||
|
|
||||||
|
on:
|
||||||
|
# workflow_run:
|
||||||
|
# workflows: [crane]
|
||||||
|
push:
|
||||||
|
branches: [main]
|
||||||
|
# types:
|
||||||
|
# - completed
|
||||||
|
# schedule:
|
||||||
|
# - cron: 0 0 * * 1
|
||||||
|
# # Publish semver tags as releases.
|
||||||
|
# tags: [ 'v*.*.*' ]
|
||||||
|
# pull_request:
|
||||||
|
# branches: [ "main" ]
|
||||||
|
|
||||||
|
env:
|
||||||
|
# Use docker.io for Docker Hub if empty
|
||||||
|
REGISTRY: ghcr.io
|
||||||
|
# github.repository as <account>/<repo>
|
||||||
|
IMAGE_NAME: ${{ github.repository }}
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
# https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#running-a-workflow-based-on-the-conclusion-of-another-workflow
|
||||||
|
# if: ${{ github.event.workflow_run.conclusion == 'success' }}
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
packages: write
|
||||||
|
# This is used to complete the identity challenge
|
||||||
|
# with sigstore/fulcio when running outside of PRs.
|
||||||
|
id-token: write
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout repository
|
||||||
|
uses: actions/checkout@v3
|
||||||
|
|
||||||
|
# Install Nix
|
||||||
|
- name: Install Nix
|
||||||
|
uses: DeterminateSystems/nix-installer-action@main
|
||||||
|
- run: nix run -I nixpkgs=channel:nixos-unstable nixpkgs#attic-client login nex https://nix.nexveridian.com ${{ secrets.ATTIC_TOKEN }} || true
|
||||||
|
- run: nix run -I nixpkgs=channel:nixos-unstable nixpkgs#attic-client cache create NexVeridian-web || true
|
||||||
|
- run: nix run -I nixpkgs=channel:nixos-unstable nixpkgs#attic-client use NexVeridian-web || true
|
||||||
|
|
||||||
|
# Set up BuildKit Docker container builder to be able to build
|
||||||
|
# multi-platform images and export cache
|
||||||
|
# https://github.com/docker/setup-buildx-action
|
||||||
|
- name: Set up Docker Buildx
|
||||||
|
uses: docker/setup-buildx-action@v3
|
||||||
|
|
||||||
|
# Login against a Docker registry except on PR
|
||||||
|
# https://github.com/docker/login-action
|
||||||
|
- name: Log into registry ${{ env.REGISTRY }}
|
||||||
|
if: github.event_name != 'pull_request'
|
||||||
|
uses: docker/login-action@v3
|
||||||
|
with:
|
||||||
|
registry: ${{ env.REGISTRY }}
|
||||||
|
username: ${{ github.actor }}
|
||||||
|
password: ${{ secrets.GHCR_TOKEN }}
|
||||||
|
|
||||||
|
# Extract metadata (tags, labels) for Docker
|
||||||
|
# https://github.com/docker/metadata-action
|
||||||
|
- name: Extract Docker metadata
|
||||||
|
id: meta
|
||||||
|
uses: docker/metadata-action@v5
|
||||||
|
with:
|
||||||
|
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
|
||||||
|
|
||||||
|
# Build Nix package
|
||||||
|
- name: Build Nix package
|
||||||
|
run: nix build .#my-docker
|
||||||
|
|
||||||
|
# https://github.com/orgs/community/discussions/25768#discussioncomment-3249183
|
||||||
|
- name: Downcase REPO
|
||||||
|
run: |
|
||||||
|
echo "REPO=${GITHUB_REPOSITORY,,}" >> ${GITHUB_ENV}
|
||||||
|
|
||||||
|
- name: Strip REPO Username
|
||||||
|
run: |
|
||||||
|
STRIP_REPO_USERNAME=$(echo "${{ env.REPO }}" | sed 's/nexveridian\///')
|
||||||
|
echo "STRIP_REPO_USERNAME=${STRIP_REPO_USERNAME}" >> ${GITHUB_ENV}
|
||||||
|
|
||||||
|
# https://github.com/docker/build-push-action/issues/538
|
||||||
|
- name: Push and tag Docker image
|
||||||
|
run: |
|
||||||
|
docker load < result
|
||||||
|
docker tag ${{ env.STRIP_REPO_USERNAME }}:latest ${{ env.REGISTRY }}/${{ env.REPO }}:latest
|
||||||
|
docker push ${{ env.REGISTRY }}/${{ env.REPO }}:latest
|
||||||
|
|
||||||
|
- run: |
|
||||||
|
for i in {1..10}; do
|
||||||
|
nix run -I nixpkgs=channel:nixos-unstable nixpkgs#attic-client push NexVeridian-web /nix/store/*/ && break || [ $i -eq 5 ] || sleep 5
|
||||||
|
done
|
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -1 +1,2 @@
|
||||||
public
|
public
|
||||||
|
result
|
||||||
|
|
1
README.md
Normal file
1
README.md
Normal file
|
@ -0,0 +1 @@
|
||||||
|
Source code for NexVeridian.com built using [Zola](https://github.com/getzola/zola)
|
|
@ -1,5 +1,5 @@
|
||||||
# The URL the site will be built for
|
# The URL the site will be built for
|
||||||
base_url = "https://nexveridian.com"
|
base_url = "https://blog.nexveridian.com/"
|
||||||
|
|
||||||
# The site title and description; used in feeds by default.
|
# The site title and description; used in feeds by default.
|
||||||
title = ""
|
title = ""
|
||||||
|
@ -38,15 +38,15 @@ menu_items = [
|
||||||
|
|
||||||
# each of these is optional, name and url are required
|
# each of these is optional, name and url are required
|
||||||
# $BASE_URL is going to be substituted by base_url from configuration
|
# $BASE_URL is going to be substituted by base_url from configuration
|
||||||
{ name = "blog", url = "$BASE_URL" },
|
{ name = "home", url = "$BASE_URL" },
|
||||||
|
|
||||||
# tags should only be enabled if you have "tags" taxonomy
|
# tags should only be enabled if you have "tags" taxonomy
|
||||||
# see documentation below for more details
|
# see documentation below for more details
|
||||||
|
{ name = "blog", url = "$BASE_URL/archive" },
|
||||||
{ name = "tags", url = "$BASE_URL/tags" },
|
{ name = "tags", url = "$BASE_URL/tags" },
|
||||||
{ name = "archive", url = "$BASE_URL/archive" },
|
|
||||||
{ name = "about me", url = "$BASE_URL/about" },
|
{ name = "about me", url = "$BASE_URL/about" },
|
||||||
|
|
||||||
{ name = "resume", url = "$BASE_URL/Elijah_McMorris_Resume.pdf" },
|
{ name = "resume", url = "$BASE_URL/Elijah_McMorris_Resume.pdf", newtab = true },
|
||||||
]
|
]
|
||||||
|
|
||||||
show_only_description = true
|
show_only_description = true
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
+++
|
+++
|
||||||
paginate_by = 3
|
title = "NexVeridian"
|
||||||
sort_by = "date"
|
template = "index.html"
|
||||||
+++
|
+++
|
||||||
|
|
6
content/blog/_index.md
Normal file
6
content/blog/_index.md
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
+++
|
||||||
|
title = "Blog"
|
||||||
|
sort_by = "date"
|
||||||
|
template = "section.html"
|
||||||
|
paginate_by = 3
|
||||||
|
+++
|
|
@ -1,6 +1,7 @@
|
||||||
+++
|
+++
|
||||||
title = "Welcome to Terminimal Theme for Zola"
|
title = "Welcome to Terminimal Theme for Zola"
|
||||||
date = 2019-02-04
|
date = 2019-02-04
|
||||||
|
# description = "A showcase post for the Terminimal theme."
|
||||||
|
|
||||||
[taxonomies]
|
[taxonomies]
|
||||||
tags = ["zola", "theme", "showcase"]
|
tags = ["zola", "theme", "showcase"]
|
|
@ -3,11 +3,11 @@ title = "About Me"
|
||||||
path = "about"
|
path = "about"
|
||||||
+++
|
+++
|
||||||
|
|
||||||
I recently finished BAS in Software Development, Im looking for a Software Engineering positions, I live in Kirkland WA, I'm a US citizen. I've contributed multiple substantial code PRs to JupyterLab and Loco.rs, created an official extension for Loco.rs adding OpenAPI integration, and I have several open source projects on my resume. My strongest programming languages: Rust, TypeScript, Python, and I also use Nix for a lot of my projects.
|
I recently finished BAS in Software Development, Im looking for Software Engineering positions, I live in Kirkland WA, I'm a US citizen. I've contributed multiple substantial code PRs to JupyterLab and Loco.rs, created an official extension for Loco.rs adding OpenAPI integration, and I have several open source projects on my resume. My strongest programming languages: Rust, TypeScript, Python, and I also use Nix for a lot of my projects.
|
||||||
|
|
||||||
# Contact Me:
|
# Contact Me:
|
||||||
- [Email](mailto:nexveridian@gmail.com)
|
- [Email](mailto:nexveridian@gmail.com)
|
||||||
- [NexVeridian.com](https://nexveridian.com)
|
- [Calendly](https://calendly.com/nexveridian/main)
|
||||||
- [GitHub.com](https://github.com/NexVeridian)
|
- [GitHub.com](https://github.com/NexVeridian)
|
||||||
- [LinkedIn](https://www.linkedin.com/in/nexveridian)
|
- [LinkedIn](https://www.linkedin.com/in/nexveridian)
|
||||||
- [Calendly](https://calendly.com/nexveridian/main)
|
- [X](https://x.com/nexveridian)
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
+++
|
+++
|
||||||
title = "Archive"
|
title = "Blog"
|
||||||
path = "archive"
|
path = "archive"
|
||||||
template = "archive.html"
|
template = "archive.html"
|
||||||
+++
|
+++
|
||||||
|
|
|
@ -29,7 +29,7 @@
|
||||||
|
|
||||||
# Create a Docker image with static-web-server to serve the site
|
# Create a Docker image with static-web-server to serve the site
|
||||||
my-docker = pkgs.dockerTools.buildImage {
|
my-docker = pkgs.dockerTools.buildImage {
|
||||||
name = "my-zola";
|
name = "nexveridian-web";
|
||||||
tag = "latest";
|
tag = "latest";
|
||||||
created = "now";
|
created = "now";
|
||||||
|
|
||||||
|
|
4
justfile
4
justfile
|
@ -7,7 +7,7 @@ update:
|
||||||
docker:
|
docker:
|
||||||
nix build .#packages.x86_64-linux.my-docker
|
nix build .#packages.x86_64-linux.my-docker
|
||||||
docker load < ./result
|
docker load < ./result
|
||||||
docker rm -f my-zola
|
docker rm -f nexveridian-web
|
||||||
docker run -d --rm -p 80:80 --name my-zola my-zola:latest
|
docker run -d --rm -p 80:80 --name nexveridian-web nexveridian-web:latest
|
||||||
rm -rf result
|
rm -rf result
|
||||||
docker image prune -f
|
docker image prune -f
|
||||||
|
|
94
static/css/custom.css
Normal file
94
static/css/custom.css
Normal file
|
@ -0,0 +1,94 @@
|
||||||
|
/* Custom styles for NexVeridian website */
|
||||||
|
|
||||||
|
:root {
|
||||||
|
/* Main theme colors */
|
||||||
|
/* --background: #1F222A; */
|
||||||
|
--background-secondary: #191b22;
|
||||||
|
/* --color: white;
|
||||||
|
--color-secondary: #a9b7c6; */
|
||||||
|
/* --accent: rgb(120, 226, 160); */
|
||||||
|
/* --accent-alpha-70: rgba(120, 226, 160, 0.7); */
|
||||||
|
/* --accent-alpha-20: rgba(120, 226, 160, 0.2); */
|
||||||
|
/* --border-color: rgba(255, 255, 255, 0.1); */
|
||||||
|
}
|
||||||
|
|
||||||
|
.project-grid {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
|
||||||
|
gap: 20px;
|
||||||
|
margin-bottom: 40px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.project-box {
|
||||||
|
background-color: var(--background-secondary);
|
||||||
|
border-radius: 8px;
|
||||||
|
padding: 20px;
|
||||||
|
transition: transform 0.3s ease, box-shadow 0.3s ease;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
height: 100%;
|
||||||
|
color: inherit;
|
||||||
|
}
|
||||||
|
|
||||||
|
.project-box-link {
|
||||||
|
text-decoration: none;
|
||||||
|
color: inherit;
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
.project-box-link:hover .project-box {
|
||||||
|
transform: translateY(-5px);
|
||||||
|
box-shadow: 0 10px 20px rgba(0, 0, 0, 0.3);
|
||||||
|
}
|
||||||
|
|
||||||
|
.project-box p {
|
||||||
|
margin-bottom: 15px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.view-project {
|
||||||
|
display: inline-block;
|
||||||
|
margin-top: auto;
|
||||||
|
font-weight: bold;
|
||||||
|
text-decoration: underline;
|
||||||
|
}
|
||||||
|
|
||||||
|
.project-tags {
|
||||||
|
color: var(--color-secondary);
|
||||||
|
font-size: 0.9em;
|
||||||
|
margin-top: 5px;
|
||||||
|
margin-bottom: 15px;
|
||||||
|
opacity: 0.8;
|
||||||
|
}
|
||||||
|
|
||||||
|
.project-tags::before {
|
||||||
|
/* content: ":: "; */
|
||||||
|
opacity: 0.7;
|
||||||
|
}
|
||||||
|
|
||||||
|
.recent-posts {
|
||||||
|
background-color: var(--background-secondary);
|
||||||
|
border-radius: 8px;
|
||||||
|
padding: 20px;
|
||||||
|
margin-bottom: 40px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.section-title {
|
||||||
|
border-bottom: 2px solid var(--accent);
|
||||||
|
padding-bottom: 10px;
|
||||||
|
margin-bottom: 20px;
|
||||||
|
font-size: 24px;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.view-all {
|
||||||
|
display: block;
|
||||||
|
text-align: left;
|
||||||
|
margin-top: 20px;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Additional overrides to ensure theme consistency */
|
||||||
|
/* body {
|
||||||
|
background-color: var(--background);
|
||||||
|
color: var(--color);
|
||||||
|
} */
|
19
templates/archive.html
Normal file
19
templates/archive.html
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
{% extends "index.html" %}
|
||||||
|
|
||||||
|
{%- block title -%}
|
||||||
|
{{ title_macros::title(page_title=page.title, main_title=config.title) }}
|
||||||
|
{%- endblock -%}
|
||||||
|
|
||||||
|
{% block extra_head %}
|
||||||
|
<link rel="stylesheet" href="{{ get_url(path="css/custom.css") }}">
|
||||||
|
{% endblock extra_head %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
<div class="post">
|
||||||
|
<h1 class="post-title">{{ page.title }}</h1>
|
||||||
|
|
||||||
|
{% set blog_section = get_section(path="blog/_index.md") %}
|
||||||
|
|
||||||
|
{{ post_macros::list_posts(pages=blog_section.pages) }}
|
||||||
|
</div>
|
||||||
|
{% endblock content %}
|
194
templates/index.html
Normal file
194
templates/index.html
Normal file
|
@ -0,0 +1,194 @@
|
||||||
|
{% import "macros/date.html" as date_macros -%}
|
||||||
|
{% import "macros/head.html" as head_macros -%}
|
||||||
|
{% import "macros/menu.html" as menu_macros -%}
|
||||||
|
{% import "macros/post.html" as post_macros -%}
|
||||||
|
{% import "macros/title.html" as title_macros -%}
|
||||||
|
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="{%- if config.default_language -%}{{ config.default_language }}{%- else -%}en{%- endif -%}">
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<title>{%- block title %}{{ config.title }}{% endblock title -%}</title>
|
||||||
|
{{ head_macros::head(config=config) }}
|
||||||
|
|
||||||
|
{%- block open_graph %}{{ head_macros::open_graph(config=config) }}{% endblock open_graph -%}
|
||||||
|
|
||||||
|
{%- if config.generate_feeds %}
|
||||||
|
{%- for feed in config.feed_filenames %}
|
||||||
|
{%- if feed is containing('atom') %}
|
||||||
|
<link rel="alternate" type="application/atom+xml" title="{{ config.title }} Atom Feed" href="{{ get_url(path=feed, trailing_slash=false, lang=lang) | safe }}" />
|
||||||
|
{%- endif %}
|
||||||
|
|
||||||
|
{%- if feed is containing('rss') %}
|
||||||
|
<link rel="alternate" type="application/rss+xml" title="{{ config.title }} RSS Feed" href="{{ get_url(path=feed, trailing_slash=false, lang=lang) | safe }}" />
|
||||||
|
{%- endif %}
|
||||||
|
|
||||||
|
{%- endfor %}
|
||||||
|
{%- endif -%}
|
||||||
|
|
||||||
|
{%- if config.extra.favicon %}
|
||||||
|
<link rel="shortcut icon" type="{{ config.extra.favicon_mimetype | default(value="image/x-icon") | safe }}" href="{{ config.extra.favicon | safe }}">
|
||||||
|
{% endif -%}
|
||||||
|
|
||||||
|
{%- block extra_head %}
|
||||||
|
<link rel="stylesheet" href="{{ get_url(path="css/custom.css") }}">
|
||||||
|
{% endblock extra_head -%}
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body class="">
|
||||||
|
<div class="container">
|
||||||
|
{% block header %}
|
||||||
|
<header class="header">
|
||||||
|
<div class="header__inner">
|
||||||
|
<div class="header__logo">
|
||||||
|
{%- if config.extra.logo_home_link %}
|
||||||
|
{% set logo_link = config.extra.logo_home_link %}
|
||||||
|
{% else %}
|
||||||
|
{% set logo_link = config.base_url %}
|
||||||
|
{% endif -%}
|
||||||
|
<a href="{{ logo_link | safe }}" style="text-decoration: none;">
|
||||||
|
<div class="logo">
|
||||||
|
{% block logo_content %}
|
||||||
|
{%- if config.extra.logo_text %}
|
||||||
|
{{ config.extra.logo_text }}
|
||||||
|
{% else %}
|
||||||
|
Terminimal theme
|
||||||
|
{% endif -%}
|
||||||
|
{% endblock logo_content %}
|
||||||
|
</div>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{% block header_menu %}
|
||||||
|
{{ menu_macros::menu(config=config, current_path=current_path) }}
|
||||||
|
{% endblock header_menu %}
|
||||||
|
</header>
|
||||||
|
{% endblock header %}
|
||||||
|
|
||||||
|
<div class="content">
|
||||||
|
{% block content %}
|
||||||
|
<div class="posts">
|
||||||
|
<h2 class="section-title">Open Source Contributions and Projects</h2>
|
||||||
|
|
||||||
|
<div class="project-grid">
|
||||||
|
<a href="https://github.com/loco-rs/loco-openapi-Initializer" class="project-box-link">
|
||||||
|
<div class="project-box">
|
||||||
|
<h3 class="post-title">Loco OpenAPI</h3>
|
||||||
|
<p class="project-tags">Rust</p>
|
||||||
|
<p>Created an official extension for Loco.rs adding OpenAPI integration</p>
|
||||||
|
<p>Automatically generates the OpenAPI specification and documentation for the routes</p>
|
||||||
|
<p>Serves the OpenAPI documentation using either Swagger-ui, Redoc, or Scalar</p>
|
||||||
|
<span class="view-project">View Source Code →</span>
|
||||||
|
</div>
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<a href="https://github.com/jupyterlab/jupyterlab/issues?q=state%3Aclosed%20is%3Apr%20author%3A@me%20is%3Amerged" class="project-box-link">
|
||||||
|
<div class="project-box">
|
||||||
|
<h3 class="post-title">JupyterLab Contributions</h3>
|
||||||
|
<p class="project-tags">TypeScript</p>
|
||||||
|
<p>[#16341] Added button to find/shut down kernels not attached to open notebooks</p>
|
||||||
|
<p>[#16265] Implemented checkbox to skip kernel restart dialog</p>
|
||||||
|
<p>[#16208] Fixed cell output area clearing in notebooks</p>
|
||||||
|
<span class="view-project">View PRs →</span>
|
||||||
|
</div>
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<a href="https://github.com/loco-rs/loco/issues?q=state%3Aclosed%20is%3Apr%20author%3A@me%20is%3Amerged" class="project-box-link">
|
||||||
|
<div class="project-box">
|
||||||
|
<h3 class="post-title">Loco.rs Contributions</h3>
|
||||||
|
<p class="project-tags">Rust</p>
|
||||||
|
<p>[#1360] Added YAML response support for routes</p>
|
||||||
|
<p>[#1093] Enabled parallel test execution, reducing test time by 65-90%</p>
|
||||||
|
<p>[#1204] Made background worker tests parallel with different database names</p>
|
||||||
|
<P>+8 more PRs</P>
|
||||||
|
<span class="view-project">View PRs →</span>
|
||||||
|
</div>
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<a href="https://nexveridian.com/ARK" class="project-box-link">
|
||||||
|
<div class="project-box">
|
||||||
|
<h3 class="post-title">ARK Invest ETF Tracker</h3>
|
||||||
|
<p class="project-tags">Next.js, TypeScript</p>
|
||||||
|
<p>Retrieves the data from an API and visualizes it in an interactive chart, showing the holding over time for the ETFs</p>
|
||||||
|
<span class="view-project">View Project →</span>
|
||||||
|
</div>
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<a href="https://api.nexveridian.com/" class="project-box-link">
|
||||||
|
<div class="project-box">
|
||||||
|
<h3 class="post-title">Ark Invest API Rust</h3>
|
||||||
|
<p class="project-tags">Rust, Polars, Axum, Redoc</p>
|
||||||
|
<p>A REST API providing JSON data on the holdings of 25 ETFs, and automatically updates daily</p>
|
||||||
|
<span class="view-project">View Source Code →</span>
|
||||||
|
</div>
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<a href="https://github.com/NexVeridian/wikidata-to-surrealdb" class="project-box-link">
|
||||||
|
<div class="project-box">
|
||||||
|
<h3 class="post-title">Wikidata To SurrealDB</h3>
|
||||||
|
<p class="project-tags">Rust</p>
|
||||||
|
<p>A tool for converting Wikidata BZ2 or JSON data dumps, to a SurrealDB database</p>
|
||||||
|
<span class="view-project">View Source Code →</span>
|
||||||
|
</div>
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<a href="https://s.nexveridian.com" class="project-box-link">
|
||||||
|
<div class="project-box">
|
||||||
|
<h3 class="post-title">Next Url Shortener</h3>
|
||||||
|
<p class="project-tags">Next.js, TypeScript</p>
|
||||||
|
<p>A URL shortener using Next.js server actions, Postgres or SurrealDB, Shadcn/ui, and Tailwind</p>
|
||||||
|
<span class="view-project">View Project →</span>
|
||||||
|
</div>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<h2 class="section-title">Recent Blog Posts</h2>
|
||||||
|
<div class="recent-posts">
|
||||||
|
{% set blog_section = get_section(path="blog/_index.md") %}
|
||||||
|
{% for page in blog_section.pages | slice(end=2) %}
|
||||||
|
<div class="post on-list">
|
||||||
|
{{ post_macros::header(page=page) }}
|
||||||
|
{{ post_macros::content(page=page, summary=true, show_only_description=page.extra.show_only_description | default(value=true)) }}
|
||||||
|
</div>
|
||||||
|
{% endfor %}
|
||||||
|
<a href="{{ get_url(path="blog") }}" class="view-all">View All Posts →</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% endblock content %}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{% block footer %}
|
||||||
|
<footer class="footer">
|
||||||
|
<div class="footer__inner">
|
||||||
|
{%- if config.extra.copyright_html %}
|
||||||
|
<div class="copyright copyright--user">{{ config.extra.copyright_html | safe }}</div>
|
||||||
|
{% else %}
|
||||||
|
<div class="copyright">
|
||||||
|
{%- if config.extra.author %}
|
||||||
|
<span>© {{ date_macros::now_year() }} {{ config.extra.author }}</span>
|
||||||
|
{% else %}
|
||||||
|
<span>© {{ date_macros::now_year() }} Powered by <a href="https://www.getzola.org/">Zola</a></span>
|
||||||
|
{% endif -%}
|
||||||
|
|
||||||
|
<span class="copyright-theme">
|
||||||
|
<span class="copyright-theme-sep">:: </span>
|
||||||
|
<a href="https://github.com/NexVeridian/NexVeridian-web">Source Code</a>
|
||||||
|
</span>
|
||||||
|
|
||||||
|
<span class="copyright-theme">
|
||||||
|
<span class="copyright-theme-sep">:: </span>
|
||||||
|
Theme: <a href="https://github.com/pawroman/zola-theme-terminimal/">Terminimal</a> by pawroman
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
{% endif -%}
|
||||||
|
</div>
|
||||||
|
</footer>
|
||||||
|
{% endblock footer %}
|
||||||
|
|
||||||
|
</div>
|
||||||
|
{%- block extra_body %}
|
||||||
|
{% endblock extra_body -%}
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
45
templates/section.html
Normal file
45
templates/section.html
Normal file
|
@ -0,0 +1,45 @@
|
||||||
|
{% extends "index.html" %}
|
||||||
|
|
||||||
|
{% block extra_head %}
|
||||||
|
<link rel="stylesheet" href="{{ get_url(path="css/custom.css") }}">
|
||||||
|
{% endblock extra_head %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
<div class="posts">
|
||||||
|
<h1 class="post-title">{{ section.title }}</h1>
|
||||||
|
|
||||||
|
{%- if paginator %}
|
||||||
|
{%- set show_pages = paginator.pages -%}
|
||||||
|
{% else %}
|
||||||
|
{%- set show_pages = section.pages -%}
|
||||||
|
{% endif -%}
|
||||||
|
|
||||||
|
{%- for page in show_pages %}
|
||||||
|
<div class="post on-list">
|
||||||
|
{{ post_macros::header(page=page) }}
|
||||||
|
{{ post_macros::content(page=page, summary=true, show_only_description=page.extra.show_only_description | default(value=false)) }}
|
||||||
|
</div>
|
||||||
|
{% endfor -%}
|
||||||
|
|
||||||
|
<div class="pagination">
|
||||||
|
<div class="pagination__buttons">
|
||||||
|
{%- if paginator.previous %}
|
||||||
|
<span class="button previous">
|
||||||
|
<a href="{{ paginator.previous | safe }}">
|
||||||
|
<span class="button__icon">←</span>
|
||||||
|
<span class="button__text">Newer posts</span>
|
||||||
|
</a>
|
||||||
|
</span>
|
||||||
|
{% endif -%}
|
||||||
|
{%- if paginator.next %}
|
||||||
|
<span class="button next">
|
||||||
|
<a href="{{ paginator.next | safe }}">
|
||||||
|
<span class="button__text">Older posts</span>
|
||||||
|
<span class="button__icon">→</span>
|
||||||
|
</a>
|
||||||
|
</span>
|
||||||
|
{% endif -%}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% endblock content %}
|
25
templates/tags/list.html
Normal file
25
templates/tags/list.html
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
{% extends "index.html" %}
|
||||||
|
|
||||||
|
{%- block title -%}
|
||||||
|
{{ title_macros::title(page_title="Tags", main_title=config.title) }}
|
||||||
|
{%- endblock -%}
|
||||||
|
|
||||||
|
{% block extra_head %}
|
||||||
|
<link rel="stylesheet" href="{{ get_url(path="css/custom.css") }}">
|
||||||
|
{% endblock extra_head %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
<div class="post">
|
||||||
|
<h1 class="post-title">all tags</h1>
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
{% for term in terms %}
|
||||||
|
<li class="tag-list">
|
||||||
|
<a href="{{ term.permalink | safe }}">
|
||||||
|
{{ term.name }} ({{ term.pages | length }} post{{ term.pages | length | pluralize }})
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
{% endfor %}
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
{% endblock content %}
|
25
templates/tags/single.html
Normal file
25
templates/tags/single.html
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
{% extends "index.html" %}
|
||||||
|
|
||||||
|
{%- block title -%}
|
||||||
|
{% set title = "Tag: " ~ term.name %}
|
||||||
|
{{ title_macros::title(page_title=title, main_title=config.title) }}
|
||||||
|
{%- endblock -%}
|
||||||
|
|
||||||
|
{% block extra_head %}
|
||||||
|
<link rel="stylesheet" href="{{ get_url(path="css/custom.css") }}">
|
||||||
|
{% endblock extra_head %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
<div class="post">
|
||||||
|
<h1 class="post-title">
|
||||||
|
tag: #{{ term.name }}
|
||||||
|
({{ term.pages | length }} post{{ term.pages | length | pluralize }})
|
||||||
|
</h1>
|
||||||
|
|
||||||
|
<a href="{{ config.base_url | safe }}/tags/">
|
||||||
|
Show all tags
|
||||||
|
</a>
|
||||||
|
|
||||||
|
{{ post_macros::list_posts(pages=term.pages) }}
|
||||||
|
</div>
|
||||||
|
{% endblock content %}
|
Loading…
Add table
Add a link
Reference in a new issue