Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 22 additions & 0 deletions quote_app/app.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
from flask import Flask, render_template
import random

app = Flask(__name__)

quotes = ['The greatest glory in living lies not in never falling, but in rising every time we fall. -Nelson Mandela', 'The way to get started is to quit talking and begin doing. -Walt Disney', "Your time is limited, so don't waste it living someone else's life. Don't be trapped by dogma – which is living with the results of other people's thinking. -Steve Jobs", 'If life were predictable it would cease to be life, and be without flavor. -Eleanor Roosevelt', "If you look at what you have in life, you'll always have more. If you look at what you don't have in life, you'll never have enough. -Oprah Winfrey", "If you set your goals ridiculously high and it's a failure, you will fail above everyone else's success. -James Cameron"]

@app.route("/health")
def health():
return int(200)

@app.route("/")
def home():
return render_template('index.html')

@app.route("/quote")
def quote():
index = random.randrange(len(quotes))
return render_template('quote.html', quote = str(quotes[index]))

if __name__ == "__main__":
app.run(host="0.0.0.0", port=80)
351 changes: 351 additions & 0 deletions quote_app/static/css/style.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,351 @@
:root {
--background-rgb: 29 30 34;

--blue-rgb: 33 150 243;
--primary-rgb: var(--blue-rgb);

--blob-color-1: rgb(var(--blue-rgb));
--blob-color-2: dodgerblue;
}

* {
box-sizing: border-box;
}

body {
height: 100vh;
display: grid;
place-items: center;
background-color: rgb(var(--background-rgb));
margin: 0rem;
overflow: hidden;
}

.screen {
width: 500px;
display: flex;
border: 3px solid rgb(var(--primary-rgb) / 80%);
aspect-ratio: 10 / 16;
border-radius: 1rem;
background-color: rgb(var(--primary-rgb) / 15%);
overflow: hidden;
position: relative;
z-index: 10;
}

.screen:after,
.screen:before {
content: "";
height: 5px;
position: absolute;
z-index: 4;
left: 50%;
translate: -50% 0%;
background-color: white;
}

.screen:before {
width: 15%;
top: 0rem;
border-bottom-left-radius: 1rem;
border-bottom-right-radius: 1rem;
}

.screen:after {
width: 25%;
bottom: 0rem;
border-top-left-radius: 1rem;
border-top-right-radius: 1rem;
}

@keyframes pan-overlay {
from {
background-position: 0% 0%;
}

to {
background-position: 0% -100%;
}
}

.screen-overlay {
background: linear-gradient(
rgb(var(--primary-rgb) / 0.15),
rgb(var(--primary-rgb) / 0.15) 3px,
transparent 3px,
transparent 9px
);
background-size: 100% 9px;
height: 100%;
width: 100%;
animation: pan-overlay 22s infinite linear;
position: absolute;
z-index: 2;
left: 0px;
top: 0px;
}

@keyframes pan-image {
0% {
background-position: 36% 42%;
background-size: 200%;
}

20% {
background-position: 30% 35%;
background-size: 200%;
}

20.0001% { /* -- View 2 -- */
background-position: 60% 85%;
background-size: 500%;
}

40% {
background-position: 49% 81%;
background-size: 500%;
}

40.0001% { /* -- View 3 -- */
background-position: 80% 42%;
background-size: 300%;
}

60% {
background-position: 84% 33%;
background-size: 300%;
}

60.0001% { /* -- View 4 -- */
background-position: 0% 0%;
background-size: 300%;
}

80% {
background-position: 15% 4%;
background-size: 300%;
}

80.0001% { /* -- View 5 -- */
background-position: 80% 10%;
background-size: 300%;
}

100% {
background-position: 72% 14%;
background-size: 300%;
}
}

.screen > .screen-image {
background-image: url("https://images.unsplash.com/photo-1515266591878-f93e32bc5937?ixlib=rb-4.0.3&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=2574&q=80");
height: 100%;
width: 100%;
position: absolute;
z-index: 1;
left: 0px;
top: 0px;
background-size: 300%;
background-position: 0% 0%;
filter: sepia(100%) hue-rotate(160deg);
opacity: 0.2;
animation: pan-image 15s linear infinite;
}

.screen > .screen-content {
display: flex;
flex-direction: column;
align-items: center;
justify-content: flex-end;
flex-grow: 1;
gap: 4rem;
position: relative;
z-index: 3;
margin: 1rem;
padding-bottom: 6rem;
border: 1px solid rgb(var(--primary-rgb) / 50%);
border-radius: 0.6rem;
}

.screen > .screen-content > .screen-icon {
color: white;
font-size: 4rem;
text-shadow: 0px 0px 0.5rem white;
}

.screen > .screen-content > .screen-user{
display: flex;
flex-direction: column;
align-items: center;
gap: 1rem;
position: relative;
}

.screen > .screen-content > .screen-user:before,
.screen > .screen-content > .screen-user:after {
content: "";
position: absolute;
top: 0px;
background-color: rgb(var(--primary-rgb));
border-radius: 1rem;
box-shadow: 0px 0px 8px 3px rgb(var(--primary-rgb) / 60%);
}

.screen > .screen-content > .screen-user:before {
height: 2px;
width: 50px;
translate: -20px -1rem;
opacity: 0.75;
}

.screen > .screen-content > .screen-user:after {
height: 3px;
width: 30px;
translate: 26px calc(-1rem - 0.5px);
}

.screen > .screen-content > .screen-user > :is(.name, .link) {
font-family: "Source Code Pro", monospace;
color: white;
text-align: center;
text-transform: uppercase;
}

.screen > .screen-content > .screen-user > .name {
position: relative;
font-size: 4.25rem;
font-weight: 400;
}

.screen > .screen-content > .screen-user > .name:before,
.screen > .screen-content > .screen-user > .name:after {
content: "";
height: 4px;
width: 4px;
position: absolute;
border: 2px solid white;
border-radius: 2px;
}

.screen > .screen-content > .screen-user > .name:before {
top: 55%;
right: -1.5rem;
}

.screen > .screen-content > .screen-user > .name:after {
top: 45%;
left: -1.5rem;
}

.screen > .screen-content > .screen-user > .link {
opacity: 0.8;
font-size: 1.5rem;
text-shadow: 0px 0px 0.5rem white;
font-weight: 400;
letter-spacing: 0.3rem;
text-decoration: none;
}

.screen > .screen-content > .screen-user > .link:is(:hover, :focus) {
text-decoration: underline;
}

@media(max-width: 700px) {
.screen {
scale: 0.6;
margin-bottom: 0rem;
}
}

/* -- Blob effect -- */

@keyframes rotate {
from {
rotate: 0deg;
}

50% {
scale: 1 1.5;
}

to {
rotate: 360deg;
}
}

#blob {
background-color: white;
height: 34vmax;
aspect-ratio: 1;
position: absolute;
left: 50%;
top: 50%;
translate: -50% -50%;
border-radius: 50%;
background: linear-gradient(to right, var(--blob-color-1), var(--blob-color-2));
animation: rotate 20s infinite;
opacity: 0.2;
}

#blur {
height: 100%;
width: 100%;
position: absolute;
z-index: 2;
backdrop-filter: blur(12vmax);
}

/* -- Links -- */
#links {
display: flex;
flex-direction: column;
gap: 0.5rem;
position: absolute;
top: 0px;
left: 0px;
z-index: 10;
padding: 1rem;
}

.meta-link {
display: flex;
align-items: center;
gap: 0.5rem;
}

.meta-link > :is(span, a) {
font-family: "Rubik", sans-serif;
font-size: 0.9rem;
color: white;
}

.meta-link > .label {
width: 160px;
text-align: right;
}

.meta-link > a {
text-decoration: none;
outline: none;
}

.meta-link > a.source {
color: rgb(94, 106, 210);
}

.meta-link > a:is(:hover, :focus) > i {
color: white;
}

.meta-link > a.youtube {
color: rgb(239, 83, 80);
}

.meta-link > a.youtube > i {
padding-top: 0.2rem;
}

.meta-link > a > i {
height: 1rem;
line-height: 1rem;
}
17 changes: 17 additions & 0 deletions quote_app/templates/index.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
<!DOCTYPE html>
<html lang="en">
<head>

<meta charset="UTF-8">
<link rel="stylesheet" href="{{ url_for('static', filename= 'css/style.css') }}">
<title>Docker App</title>

</head>

<body>

<h1 style="color:white; " > Welcome to Project 1 (Docker App) </h1>
<h2><a href = "{{ url_for('quote') }}">Click Here for the Quote</a></h2>

</body>
</html>
Loading