added homepage
This commit is contained in:
commit
1936d7cab9
13 changed files with 1262 additions and 0 deletions
1
.direnv/flake-profile
Symbolic link
1
.direnv/flake-profile
Symbolic link
|
|
@ -0,0 +1 @@
|
||||||
|
flake-profile-2-link
|
||||||
1
.direnv/flake-profile-1-link
Symbolic link
1
.direnv/flake-profile-1-link
Symbolic link
|
|
@ -0,0 +1 @@
|
||||||
|
/nix/store/8q0la01v17vcszprb68c867dll45qklc-nix-shell-env
|
||||||
1
.direnv/flake-profile-2-link
Symbolic link
1
.direnv/flake-profile-2-link
Symbolic link
|
|
@ -0,0 +1 @@
|
||||||
|
/nix/store/xp5h122fsq5nih25lp5di2l1y7hz0aj6-nix-shell-env
|
||||||
1
.envrc
Normal file
1
.envrc
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
use flake
|
||||||
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
/target
|
||||||
1080
Cargo.lock
generated
Normal file
1080
Cargo.lock
generated
Normal file
File diff suppressed because it is too large
Load diff
16
Cargo.toml
Normal file
16
Cargo.toml
Normal file
|
|
@ -0,0 +1,16 @@
|
||||||
|
[package]
|
||||||
|
name = "portfolio"
|
||||||
|
version = "0.1.0"
|
||||||
|
edition = "2021"
|
||||||
|
|
||||||
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
anyhow = "1.0.79"
|
||||||
|
askama = "0.12.1"
|
||||||
|
axum = "0.7.4"
|
||||||
|
tokio = { version = "1.36.0", features = ["macros", "rt-multi-thread"] }
|
||||||
|
tower = "0.4.13"
|
||||||
|
tower-http = { version = "0.5.1", features = ["fs"] }
|
||||||
|
tracing = "0.1.40"
|
||||||
|
tracing-subscriber = { version = "0.3.18", features = ["env-filter"] }
|
||||||
26
flake.lock
generated
Normal file
26
flake.lock
generated
Normal file
|
|
@ -0,0 +1,26 @@
|
||||||
|
{
|
||||||
|
"nodes": {
|
||||||
|
"nixpkgs": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1707743206,
|
||||||
|
"narHash": "sha256-AehgH64b28yKobC/DAWYZWkJBxL/vP83vkY+ag2Hhy4=",
|
||||||
|
"owner": "NixOS",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"rev": "2d627a2a704708673e56346fcb13d25344b8eaf3",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"id": "nixpkgs",
|
||||||
|
"ref": "nixpkgs-unstable",
|
||||||
|
"type": "indirect"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"root": {
|
||||||
|
"inputs": {
|
||||||
|
"nixpkgs": "nixpkgs"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"root": "root",
|
||||||
|
"version": 7
|
||||||
|
}
|
||||||
24
flake.nix
Normal file
24
flake.nix
Normal file
|
|
@ -0,0 +1,24 @@
|
||||||
|
{
|
||||||
|
description = "SunServer";
|
||||||
|
|
||||||
|
inputs={
|
||||||
|
nixpkgs.url = "nixpkgs/nixpkgs-unstable";
|
||||||
|
};
|
||||||
|
outputs = { self, nixpkgs }@inputs:
|
||||||
|
let
|
||||||
|
supportedSystems = [ "x86_64-linux" ];
|
||||||
|
forAllSystems = nixpkgs.lib.genAttrs supportedSystems;
|
||||||
|
pkgs = forAllSystems (system:
|
||||||
|
import nixpkgs {
|
||||||
|
inherit system;
|
||||||
|
}
|
||||||
|
);
|
||||||
|
in {
|
||||||
|
packages = forAllSystems (system: {
|
||||||
|
default = pkgs.${system}.callPackage ./nix/default.nix { };
|
||||||
|
});
|
||||||
|
devShells = forAllSystems (system: {
|
||||||
|
default = pkgs.${system}.callPackage ./nix/devshell.nix { };
|
||||||
|
});
|
||||||
|
};
|
||||||
|
}
|
||||||
10
nix/default.nix
Normal file
10
nix/default.nix
Normal file
|
|
@ -0,0 +1,10 @@
|
||||||
|
{ pkgs ? import <nixpkgs> { }, lib }:
|
||||||
|
|
||||||
|
pkgs.rustPlatform.buildRustPackage rec {
|
||||||
|
pname = "sun_server";
|
||||||
|
version = "1.0.0";
|
||||||
|
cargoLock.lockFile = ../Cargo.lock;
|
||||||
|
src = pkgs.lib.cleanSource ../.;
|
||||||
|
buildInputs = [ ];
|
||||||
|
# doCheck = false;
|
||||||
|
}
|
||||||
16
nix/devshell.nix
Normal file
16
nix/devshell.nix
Normal file
|
|
@ -0,0 +1,16 @@
|
||||||
|
{ pkgs ? import <nixpkgs> { } }:
|
||||||
|
pkgs.mkShell {
|
||||||
|
# Get dependencies from the main package
|
||||||
|
inputsFrom = [ (pkgs.callPackage ./default.nix { }) ];
|
||||||
|
# Additional tooling
|
||||||
|
buildInputs = with pkgs; [
|
||||||
|
cargo
|
||||||
|
cargo-watch
|
||||||
|
rustc
|
||||||
|
rustup
|
||||||
|
clippy
|
||||||
|
rust-analyzer
|
||||||
|
pkg-config
|
||||||
|
bacon
|
||||||
|
];
|
||||||
|
}
|
||||||
59
src/main.rs
Normal file
59
src/main.rs
Normal file
|
|
@ -0,0 +1,59 @@
|
||||||
|
use askama::Template;
|
||||||
|
use axum::{
|
||||||
|
http::StatusCode,
|
||||||
|
response::{Html, IntoResponse, Response},
|
||||||
|
routing::get,
|
||||||
|
Router,
|
||||||
|
};
|
||||||
|
use tracing::info;
|
||||||
|
use tracing_subscriber::{layer::SubscriberExt, util::SubscriberInitExt};
|
||||||
|
|
||||||
|
#[tokio::main]
|
||||||
|
async fn main() {
|
||||||
|
tracing_subscriber::registry()
|
||||||
|
.with(
|
||||||
|
tracing_subscriber::EnvFilter::try_from_default_env()
|
||||||
|
.unwrap_or_else(|_| "portfolio=info".into()),
|
||||||
|
)
|
||||||
|
.with(tracing_subscriber::fmt::layer())
|
||||||
|
.init();
|
||||||
|
|
||||||
|
info!("hello, web server!");
|
||||||
|
// build our application with a single route
|
||||||
|
let app = Router::new().route("/", get(root));
|
||||||
|
|
||||||
|
// run our app with hyper, listening globally on port 3000
|
||||||
|
let listener = tokio::net::TcpListener::bind("0.0.0.0:3000").await.unwrap();
|
||||||
|
axum::serve(listener, app).await.unwrap();
|
||||||
|
}
|
||||||
|
async fn root() -> impl IntoResponse {
|
||||||
|
let template = HelloTemplate {};
|
||||||
|
HtmlTemplate(template)
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Template)]
|
||||||
|
#[template(path = "index.html")]
|
||||||
|
struct HelloTemplate;
|
||||||
|
|
||||||
|
/// A wrapper type that we'll use to encapsulate HTML parsed by askama into valid HTML for axum to serve.
|
||||||
|
struct HtmlTemplate<T>(T);
|
||||||
|
|
||||||
|
/// Allows us to convert Askama HTML templates into valid HTML for axum to serve in the response.
|
||||||
|
impl<T> IntoResponse for HtmlTemplate<T>
|
||||||
|
where
|
||||||
|
T: Template,
|
||||||
|
{
|
||||||
|
fn into_response(self) -> Response {
|
||||||
|
// Attempt to render the template with askama
|
||||||
|
match self.0.render() {
|
||||||
|
// If we're able to successfully parse and aggregate the template, serve it
|
||||||
|
Ok(html) => Html(html).into_response(),
|
||||||
|
// If we're not, return an error or some bit of fallback HTML
|
||||||
|
Err(err) => (
|
||||||
|
StatusCode::INTERNAL_SERVER_ERROR,
|
||||||
|
format!("Failed to render template. Error: {}", err),
|
||||||
|
)
|
||||||
|
.into_response(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
26
templates/index.html
Normal file
26
templates/index.html
Normal file
|
|
@ -0,0 +1,26 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<title>Steven Carpenters Portfolio</title>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<nav>
|
||||||
|
<ul>
|
||||||
|
<li>Home</li>
|
||||||
|
<li>Blog</li>
|
||||||
|
<li>Projects</li>
|
||||||
|
<li>Resume</li>
|
||||||
|
</ul>
|
||||||
|
</nav>
|
||||||
|
<p>Hello! My name is Steven Carpenter, and I am 25 years old. Since 2011, I have been immersed in the world of coding,
|
||||||
|
driven by a passion to enhance the ease and security of our daily computer use for everyone. My primary programming
|
||||||
|
language is Rust, but I also have experience in seven other languages, including Go and JavaScript.</p>
|
||||||
|
<p>I aim to update my blog at least twice a week, typically on Tuesdays and Thursdays. Additionally, you might see
|
||||||
|
extra posts coinciding with major updates to my projects or significant news in the tech industry. If you wish to
|
||||||
|
get in touch, please email me at steven.carpenter@skdevstudios.com, using 'Portfolio Contact' as the subject.</p>
|
||||||
|
<p>I've chosen to create my own website for this venture instead of relying on traditional blogging platforms or
|
||||||
|
social media because I view those as channels primarily for discoverability. In contrast, this website represents my
|
||||||
|
own space on the web—a space I own, moderate, and host. This independence ensures that my content remains unaffected
|
||||||
|
by the profit-driven algorithms of other platforms.</p>
|
||||||
|
</body>
|
||||||
Loading…
Add table
Add a link
Reference in a new issue