diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..0ec94ab --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +.DS_Store +node_modules/ +dist/ +build/ +*.log diff --git a/README.md b/README.md new file mode 100644 index 0000000..3920cac --- /dev/null +++ b/README.md @@ -0,0 +1,35 @@ +# functions.io + +Modern solutions for an evolving technology landscape. + +## Overview + +functions.io is a technology consulting firm based in Utah, USA. We specialize in technology consulting, systems integration, and software development. + +This repository contains the source code for the functions.io website and an experimental dashboard for media processing. + +## Project Structure + +- `index.html`: The main landing page for functions.io. +- `css/`: Custom styles and Bootstrap overrides. +- `images/`: Brand assets and photography used across the site. +- `dashboard/stream/`: A suite of browser-based media tools, including: + - Video transcoding (using ffmpeg.wasm) + - Image optimization (using wasm-imagemagick) + - Real-time video calling (using PeerJS) + +## Local Development + +You can serve the website locally for development and verification using any static file server. For example, using Python: + +```bash +python3 -m http.server 8000 +``` + +Once the server is running, navigate to `http://localhost:8000` in your browser. + +## Technologies Used + +- **Frontend**: Bootstrap 4 & 5, jQuery +- **Media Processing**: [ffmpeg.wasm](https://github.com/ffmpegwasm/ffmpeg.wasm), [wasm-imagemagick](https://github.com/KnicKnic/Wasm-ImageMagick) +- **Networking**: [PeerJS](https://peerjs.com/) diff --git a/dashboard/stream/concatDemuxer.html b/dashboard/stream/concatDemuxer.html index db5fb35..514a104 100644 --- a/dashboard/stream/concatDemuxer.html +++ b/dashboard/stream/concatDemuxer.html @@ -1,8 +1,8 @@ - - + + @@ -26,7 +26,7 @@

Select multiple video files to Concatenate

message.innerHTML = `${time / 1000000} s`; }); await ffmpeg.load({ - coreURL: "/stream/assets/core/package/dist/umd/ffmpeg-core.js", + coreURL: "/dashboard/stream/assets/core/package/dist/umd/ffmpeg-core.js", }); } message.innerHTML = "Start Concating"; diff --git a/dashboard/stream/index.html b/dashboard/stream/index.html index 91040df..cc3e338 100644 --- a/dashboard/stream/index.html +++ b/dashboard/stream/index.html @@ -8,7 +8,7 @@ Dashboard - {% include favicons.html %} + @@ -742,7 +742,7 @@

Video

message.innerHTML = `${progress * 100} %`; }); await ffmpeg.load({ - coreURL: "/stream/assets/core/package/dist/umd/ffmpeg-core.js", + coreURL: "/dashboard/stream/assets/core/package/dist/umd/ffmpeg-core.js", }); } const { name } = videoMain; diff --git a/dashboard/stream/transcode-mt.esm.html b/dashboard/stream/transcode-mt.esm.html index 1b7f6db..9414116 100644 --- a/dashboard/stream/transcode-mt.esm.html +++ b/dashboard/stream/transcode-mt.esm.html @@ -8,8 +8,8 @@

Upload a video to transcode to mp4 (x264) and play!

- + +

Upload a video to transcode to mp4 (x264) and play!

@@ -25,7 +25,7 @@

Upload a video to transcode to mp4 (x264) and play!

message.innerHTML = `${progress * 100} %, time: ${time / 1000000} s`; }); await ffmpeg.load({ - coreURL: "/stream/assets/core-mt/package/dist/umd/ffmpeg-core.js", + coreURL: "/dashboard/stream/assets/core-mt/package/dist/umd/ffmpeg-core.js", }); } const { name } = files[0]; diff --git a/dashboard/stream/transcode.esm.html b/dashboard/stream/transcode.esm.html index 6779a2e..e048bfc 100644 --- a/dashboard/stream/transcode.esm.html +++ b/dashboard/stream/transcode.esm.html @@ -8,8 +8,8 @@

Upload a video to transcode to mp4 (x264) and play!

- + +

Upload a video to transcode to mp4 (x264) and play!

@@ -25,7 +25,7 @@

Upload a video to transcode to mp4 (x264) and play!

message.innerHTML = `${progress * 100} %, time: ${time / 1000000} s`; }); await ffmpeg.load({ - coreURL: "/stream/assets/core/package/dist/umd/ffmpeg-core.js", + coreURL: "/dashboard/stream/assets/core/package/dist/umd/ffmpeg-core.js", }); } const { name } = files[0]; diff --git a/dashboard/stream/trim.html b/dashboard/stream/trim.html index 7762b18..3255bb2 100644 --- a/dashboard/stream/trim.html +++ b/dashboard/stream/trim.html @@ -1,8 +1,8 @@ - - + +

Video

@@ -26,7 +26,7 @@

Upload a mp4 (x264) video and trim its first 1 seconds and play!

message.innerHTML = `${progress * 100} %`; }); await ffmpeg.load({ - coreURL: "/stream/assets/core/package/dist/umd/ffmpeg-core.js", + coreURL: "/dashboard/stream/assets/core/package/dist/umd/ffmpeg-core.js", }); } const { name } = files[0]; diff --git a/index.html b/index.html index 34a23f8..d9c1ff7 100644 --- a/index.html +++ b/index.html @@ -12,8 +12,8 @@ - - + + @@ -70,7 +70,7 @@

Tailored to fit your unique functional needs.

- Card image cap + Business strategy and technology consulting

Technology Consulting

We specialize in working with small to medium-sized businesses by gathering business requirements, developing a technological strategy to satisfy those requirements, and outputting results that show.

@@ -80,7 +80,7 @@

Technology Consulting

- Card image cap + Systems integration and hardware connectivity

Systems Integration

Disparate software/hardware is a thing of the past. We break open stove-piped solutions and integrate where you need it the most. We are dedicated to creative problem-solving within existing infrastructures to reduce development cost.

@@ -90,7 +90,7 @@

Systems Integration

- Card image cap + Custom software development and code optimization

Software Development

Need something more custom? We provide software development services. We build bespoke software in an agile, flexible way to provide confidence in your software solution, all while using modern software development best practices.

@@ -212,7 +212,7 @@

Web Marketing/SEO

- Card image cap + Digital Education and Safety Foundation Project

Digital Education & Safety Foundation

The Digital Education & Safety Foundation is a non-profit that provides STEM/STEAM education services to the underserved.