deedrop1140 commited on
Commit
21dd635
·
verified ·
1 Parent(s): 79e7209

Upload 13 files

Browse files
Dockerfile ADDED
@@ -0,0 +1,23 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Use a lightweight Python image
2
+ FROM python:3.10-slim
3
+
4
+ # Set working directory
5
+ WORKDIR /app
6
+
7
+ # Copy requirements first for caching
8
+ COPY requirements.txt .
9
+
10
+ # Install system dependencies (needed for OpenCV, rembg, etc.)
11
+ RUN apt-get update && apt-get install -y --no-install-recommends \
12
+ libgl1 libglib2.0-0 \
13
+ && pip install --no-cache-dir -r requirements.txt \
14
+ && apt-get clean && rm -rf /var/lib/apt/lists/*
15
+
16
+ # Copy the app code
17
+ COPY . .
18
+
19
+ # Expose Flask port (must match app.py → 7860)
20
+ EXPOSE 7860
21
+
22
+ # Run Flask app
23
+ CMD ["python", "app.py"]
aesthetic_instagram_captions.csv ADDED
@@ -0,0 +1,301 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Captions
2
+ Capture the beauty around you.
3
+ Follow your heart; it knows the way.
4
+ Be your own kind of beautiful.
5
+ The journey is the adventure.
6
+ Every moment is a fresh beginning.
7
+ Create your own destiny.
8
+ Life is what you make it.
9
+ Believe in the impossible.
10
+ Every sunset is a new beginning.
11
+ Stay inspired.
12
+ Create the life you want to live.
13
+ Embrace every moment.
14
+ Find peace in the chaos.
15
+ Be the light.
16
+ The world is full of possibilities.
17
+ Make every day count.
18
+ You are capable of amazing things.
19
+ Life is better when you’re laughing.
20
+ Seek adventure and find your soul.
21
+ The best is yet to come.
22
+ Let your heart be your guide.
23
+ Find joy in the journey.
24
+ Believe in your dreams.
25
+ Dance to the rhythm of life.
26
+ Collect beautiful memories.
27
+ Life is a collection of moments.
28
+ Create a life that feels good on the inside.
29
+ Stay true to who you are.
30
+ Find your own path.
31
+ The world is yours to explore.
32
+ Let your light shine.
33
+ Create a masterpiece.
34
+ Chase your dreams.
35
+ Embrace the magic of life.
36
+ Life is an adventure; make the most of it.
37
+ Live life in color.
38
+ Find beauty in every day.
39
+ Let go of what doesn’t serve you.
40
+ Create a life you can’t wait to wake up to.
41
+ Believe in the magic of your dreams.
42
+ Chase the sunset.
43
+ The sky is alive with color.
44
+ Make today so awesome that yesterday gets jealous.
45
+ Stay wild.
46
+ Believe in yourself and all that you are.
47
+ Create your own path.
48
+ Let your soul shine.
49
+ Adventure is out there.
50
+ Life is short; make it sweet.
51
+ Dream big.
52
+ Every day is a fresh start.
53
+ Stay positive.
54
+ Create your own happiness.
55
+ Find your joy.
56
+ Follow your bliss.
57
+ Live for the moments you can’t put into words.
58
+ Breathe in the good vibes.
59
+ You are the artist of your own life.
60
+ Make today amazing.
61
+ The world is full of beautiful things.
62
+ Let your dreams be your wings.
63
+ Embrace every moment.
64
+ The sky is the limit.
65
+ Chase after the things that make you feel alive.
66
+ "You only live once, but if you do it right, once is enough."
67
+ Shine bright.
68
+ Be the change.
69
+ Life is an adventure; make it count.
70
+ Do what makes your soul happy.
71
+ Follow the sun.
72
+ Find your peace.
73
+ Stay curious.
74
+ The journey is the destination.
75
+ Leave a little sparkle everywhere you go.
76
+ Believe in the magic.
77
+ You are stronger than you think.
78
+ Every moment is a new beginning.
79
+ Create a life you love.
80
+ Let your heart guide you.
81
+ Dream without fear.
82
+ Shine on.
83
+ Make every day count.
84
+ Dance like nobody's watching.
85
+ "Live simply, dream big."
86
+ Collect beautiful moments.
87
+ Be your own light.
88
+ Every sunset brings the promise of a new dawn.
89
+ Chase your wildest dreams.
90
+ Life is a beautiful ride.
91
+ Let go and let life happen.
92
+ Follow your dreams.
93
+ Create your own kind of magic.
94
+ Find joy in the little things.
95
+ You are enough.
96
+ Believe in your power.
97
+ Make your own sunshine.
98
+ "Seek adventure, find yourself."
99
+ "Dream big, work hard."
100
+ Find your fire.
101
+ Let your spirit soar.
102
+ Every day is a new beginning.
103
+ Find your light.
104
+ Stay grounded.
105
+ Believe in yourself and you will be unstoppable.
106
+ Create the life you want.
107
+ Chase the moments.
108
+ Live life in full bloom.
109
+ Do what makes you happy.
110
+ Let your heart be your guide.
111
+ The world is yours to explore.
112
+ Stay inspired.
113
+ Make your own magic.
114
+ Find beauty in the chaos.
115
+ Create a life that feels good on the inside.
116
+ Believe in the impossible.
117
+ Every sunset is a new beginning.
118
+ Let go and let life happen.
119
+ Follow your bliss.
120
+ Chase your dreams.
121
+ The best is yet to come.
122
+ Be the energy you want to attract.
123
+ Life is short; make it count.
124
+ Shine bright like a diamond.
125
+ Make every day a little bit sweeter.
126
+ Let your soul shine.
127
+ Stay true to who you are.
128
+ Life is an adventure; make the most of it.
129
+ Create your own destiny.
130
+ Believe in yourself and magic will happen.
131
+ Let your dreams be your compass.
132
+ Embrace the glorious mess that you are.
133
+ Collect beautiful memories.
134
+ Every moment is a chance to create something beautiful.
135
+ "Stay wild, moon child."
136
+ Life is a journey; make the most of it.
137
+ Let the beauty of what you love be what you do.
138
+ Follow the sun.
139
+ Find your happy place.
140
+ The sky is the limit.
141
+ Dream big and dare to fail.
142
+ Do more of what makes you happy.
143
+ Let go of what doesn’t serve you.
144
+ Every sunset brings the promise of a new dawn.
145
+ Life is better when you’re laughing.
146
+ "Be a voice, not an echo."
147
+ Find beauty in the ordinary.
148
+ "Collect moments, not things."
149
+ Seek what sets your soul on fire.
150
+ Let the adventure begin.
151
+ Chase after the things that make you feel alive.
152
+ You are the artist of your own life.
153
+ Believe in your dreams.
154
+ Create your own path.
155
+ The world is full of beautiful things.
156
+ Stay curious.
157
+ Find your rhythm.
158
+ Let your light shine.
159
+ Dance to the rhythm of life.
160
+ Life is a canvas; make it a masterpiece.
161
+ You are enough just as you are.
162
+ Embrace every moment.
163
+ Believe in yourself and all that you are.
164
+ Life is too short for bad vibes.
165
+ Create a life that feels good on the inside.
166
+ Adventure awaits; go find it.
167
+ Find peace in the chaos.
168
+ The sky is alive with color.
169
+ Make today amazing.
170
+ Create your own sunshine.
171
+ Let your heart be your compass.
172
+ Every moment is a fresh beginning.
173
+ You are capable of amazing things.
174
+ Believe in the magic of new beginnings.
175
+ Chase your dreams and never look back.
176
+ Life is what you make it.
177
+ Stay true to yourself and never give up.
178
+ Do what makes your soul happy.
179
+ Create your own adventure.
180
+ Let the beauty of what you love be what you do.
181
+ Find joy in the journey.
182
+ "Follow your heart, it knows the way."
183
+ Shine bright and never dim.
184
+ Leave a little sparkle wherever you go.
185
+ Seek beauty in every day.
186
+ Life is an adventure; enjoy the ride.
187
+ The best is yet to come.
188
+ Let your spirit soar.
189
+ Believe in your power.
190
+ Create the life you want.
191
+ Find your light and let it shine.
192
+ Chase the sunset.
193
+ Life is a beautiful ride.
194
+ Create your own magic.
195
+ Let go and let life happen.
196
+ Follow your dreams.
197
+ Life is short; make it sweet.
198
+ Believe in the beauty of your dreams.
199
+ Every day is a fresh start.
200
+ Find your joy in the journey.
201
+ Be the change you wish to see in the world.
202
+ Create your own happiness.
203
+ Life is better when you’re laughing.
204
+ Embrace the glorious chaos.
205
+ Let the adventure unfold.
206
+ "Stay humble, work hard, be kind."
207
+ Chase the moment.
208
+ The journey is the adventure.
209
+ Live life in full bloom.
210
+ Find your own way.
211
+ Believe in the magic of your dreams.
212
+ Create the life you can’t wait to wake up to.
213
+ Let your dreams take flight.
214
+ Life is a collection of moments.
215
+ Be your own light.
216
+ "Dream big, sparkle more, shine bright."
217
+ Follow the sun and let it lead the way.
218
+ Leave your worries behind.
219
+ Find joy in the little things.
220
+ Chase your wildest dreams.
221
+ Believe in the impossible.
222
+ Create a life you love.
223
+ Let your heart guide you.
224
+ Dance like nobody's watching.
225
+ Life is what you make it.
226
+ Embrace the unknown.
227
+ Follow your bliss.
228
+ "Be a voice, not an echo."
229
+ Find peace in the chaos.
230
+ The world is full of beautiful possibilities.
231
+ Create your own path.
232
+ Believe in yourself and you will be unstoppable.
233
+ Every sunset brings the promise of a new dawn.
234
+ Let go of what no longer serves you.
235
+ Chase the sunset and let it guide your way.
236
+ Be the light in someone’s darkness.
237
+ Find your fire and let it burn bright.
238
+ "Live simply, dream big, be grateful."
239
+ Believe in your dreams and make them happen.
240
+ Let your soul shine.
241
+ Create the life you want to live.
242
+ Embrace the magic of life.
243
+ Chase the moments that make your heart smile.
244
+ Stay true to yourself.
245
+ Let your light shine and never dim.
246
+ Find beauty in the ordinary.
247
+ Life is a beautiful adventure.
248
+ Create your own happiness.
249
+ Believe in the magic of your dreams.
250
+ Chase after the things that set your soul on fire.
251
+ Life is short; make it count.
252
+ Let your heart be your compass.
253
+ Every day is a new beginning.
254
+ Find joy in the journey.
255
+ Create your own kind of magic.
256
+ "Stay wild, moon child."
257
+ Believe in yourself and you can achieve anything.
258
+ Dance to the rhythm of life.
259
+ The sky is the limit.
260
+ Make today amazing.
261
+ Let your dreams take flight.
262
+ Chase the sunset.
263
+ Life is what you make it.
264
+ Create a life you can’t wait to wake up to.
265
+ Let go of what doesn’t serve you.
266
+ Follow your heart; it knows the way.
267
+ Every moment is a fresh beginning.
268
+ Find your joy in the little things.
269
+ Believe in the magic of your dreams.
270
+ The world is full of possibilities.
271
+ Create your own adventure.
272
+ Life is a beautiful ride.
273
+ Let your spirit soar.
274
+ Dance like nobody's watching.
275
+ Believe in yourself and make your dreams come true.
276
+ Chase your dreams and never look back.
277
+ Create your own sunshine.
278
+ Let your light shine bright.
279
+ Life is short; make it sweet.
280
+ Find beauty in every day.
281
+ The best is yet to come.
282
+ Every sunset is a new beginning.
283
+ Follow your bliss and let it lead the way.
284
+ Create a life you love.
285
+ Let your heart guide you.
286
+ Find joy in the journey.
287
+ The journey is the destination.
288
+ Be your own light.
289
+ Believe in the power of your dreams.
290
+ Life is an adventure; enjoy the ride.
291
+ Chase after the things that make you feel alive.
292
+ Create your own kind of happiness.
293
+ The world is yours to explore.
294
+ Stay inspired.
295
+ Let your dreams be your wings.
296
+ Dance to the rhythm of your heart.
297
+ Create the life you can’t wait to wake up to.
298
+ Find your fire and let it burn bright.
299
+ Believe in yourself and all that you are.
300
+ Every moment is a chance to create something beautiful.
301
+ Let the beauty of what you love be what you do.
app.py ADDED
@@ -0,0 +1,125 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+ os.environ["NUMBA_CACHE_DIR"] = "/tmp"
3
+ os.environ["NUMBA_DISABLE_CACHING"] = "1"
4
+ import warnings
5
+ import cv2
6
+ import numpy as np
7
+ import pandas as pd
8
+ from rembg import remove
9
+ import tensorflow as tf
10
+ from tensorflow.keras.preprocessing import image
11
+ from tensorflow.keras.applications import VGG16
12
+ from sklearn.metrics.pairwise import cosine_similarity
13
+ from PIL import Image
14
+ from flask import Flask, render_template, request, redirect, url_for, send_file
15
+
16
+ app = Flask(__name__, template_folder='templates')
17
+
18
+ warnings.filterwarnings('ignore')
19
+
20
+ # Load the captions dataset
21
+ captions_df = pd.read_csv("aesthetic_instagram_captions.csv")
22
+ captions = captions_df['Captions'].values # Corrected column name
23
+
24
+ # Load the pre-trained VGG16 model
25
+ model = VGG16(weights='imagenet', include_top=False, pooling='max')
26
+
27
+ # Function to remove the background using rembg
28
+ def remove_background(image_path):
29
+ input_image = Image.open(image_path)
30
+ output_image = remove(input_image)
31
+ output_image = output_image.resize((512, 512)) # Resize to 512x512
32
+ output_path = os.path.splitext(image_path)[0] + '_no_bg.png'
33
+ output_image.save(output_path)
34
+ return output_path
35
+
36
+ # Function to change the background
37
+ def change_background(foreground_path, background_path):
38
+ foreground = cv2.imread(foreground_path)
39
+ foreground = cv2.resize(foreground, (512, 512)) # Resize to 512x512
40
+ background = cv2.imread(background_path)
41
+ background = cv2.resize(background, (foreground.shape[1], foreground.shape[0]))
42
+ gray_foreground = cv2.cvtColor(foreground, cv2.COLOR_BGR2GRAY)
43
+ _, mask = cv2.threshold(gray_foreground, 1, 255, cv2.THRESH_BINARY)
44
+ mask_inv = cv2.bitwise_not(mask)
45
+ background_bg = cv2.bitwise_and(background, background, mask=mask_inv)
46
+ foreground_fg = cv2.bitwise_and(foreground, foreground, mask=mask)
47
+ result = cv2.add(background_bg, foreground_fg)
48
+ return result
49
+
50
+ # Function to extract features from an image
51
+ # Function to extract features from an image
52
+ def extract_features(img_path):
53
+ img = image.load_img(img_path, target_size=(224, 224))
54
+ img_array = image.img_to_array(img)
55
+ img_array = np.expand_dims(img_array, axis=0)
56
+ img_array = tf.keras.applications.vgg16.preprocess_input(img_array)
57
+ features = model.predict(img_array)
58
+ return features # No need to index further
59
+
60
+
61
+ # Function to generate caption based on image input
62
+ def generate_caption(img_path):
63
+ img_features = extract_features(img_path)
64
+ captions = []
65
+ for caption in captions_df['Captions'].values:
66
+ caption_features = np.random.rand(1, 512) # Dummy features
67
+ sim = cosine_similarity(img_features, caption_features)
68
+ captions.append((caption, sim[0][0]))
69
+ captions.sort(key=lambda x: x[1], reverse=True)
70
+ return captions[0][0]
71
+
72
+ @app.route('/', methods=['GET', 'POST'])
73
+ def index():
74
+ if request.method == 'POST':
75
+ if 'foreground' in request.files and 'background' in request.files:
76
+ foreground_file = request.files['foreground']
77
+ background_file = request.files['background']
78
+ foreground_path = os.path.join('uploads', foreground_file.filename)
79
+ background_path = os.path.join('uploads', background_file.filename)
80
+ foreground_file.save(foreground_path)
81
+ background_file.save(background_path)
82
+ fg_no_bg = remove_background(foreground_path)
83
+ result_image = change_background(fg_no_bg, background_path)
84
+ result_path = 'uploads/result.png'
85
+ cv2.imwrite(result_path, result_image)
86
+ return render_template('output.html', image_path=result_path)
87
+ elif 'image' in request.files:
88
+ image_file = request.files['image']
89
+ image_path = os.path.join('uploads', image_file.filename)
90
+ image_file.save(image_path)
91
+ caption = generate_caption(image_path)
92
+ return render_template('output.html', caption=caption)
93
+ return render_template('index.html')
94
+
95
+ @app.route('/uploads/<filename>')
96
+ def uploaded_file(filename):
97
+ return send_file(os.path.join('uploads', filename), as_attachment=True)
98
+
99
+ @app.route('/index.html')
100
+ def home():
101
+ return render_template('index.html')
102
+
103
+ @app.route('/pricing.html')
104
+ def pricing():
105
+ return render_template('pricing.html')
106
+
107
+ @app.route('/contact.html')
108
+ def contact():
109
+ return render_template('contact.html')
110
+
111
+ @app.route('/login.html')
112
+ def login():
113
+ return render_template('login.html')
114
+
115
+
116
+
117
+ @app.route('/signup.html')
118
+ def signup():
119
+ return render_template('signup.html')
120
+
121
+
122
+
123
+ if __name__ == "__main__":
124
+ app.run(host="0.0.0.0", port=7860)
125
+
requirements.txt ADDED
Binary file (2.85 kB). View file
 
static/script.js ADDED
@@ -0,0 +1,68 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ // Create a glowing effect element
2
+ const glowingEffect = document.createElement('div');
3
+ glowingEffect.classList.add('glowing-effect');
4
+ document.body.appendChild(glowingEffect);
5
+
6
+ // Add event listeners to track the cursor position
7
+ document.addEventListener('mousemove', (event) => {
8
+ glowingEffect.style.setProperty('--x', `${event.clientX}px`);
9
+ glowingEffect.style.setProperty('--y', `${event.clientY}px`);
10
+ });
11
+
12
+ // Add a class to the glowing effect element to enable JavaScript-generated styles
13
+ glowingEffect.classList.add('js-generated');
14
+
15
+ const imageInput = document.getElementById('image-input');
16
+ const generateCaptionBtn = document.getElementById('generate-caption-btn');
17
+ const removeBackgroundBtn = document.getElementById('remove-background-btn');
18
+ const changeBackgroundBtn = document.getElementById('change-background-btn');
19
+ const outputDiv = document.getElementById('output');
20
+
21
+ generateCaptionBtn.addEventListener('click', async () => {
22
+ try {
23
+ const imgPath = imageInput.files[0].path;
24
+ const response = await fetch('/generate_caption', {
25
+ method: 'POST',
26
+ headers: { 'Content-Type': 'application/json' },
27
+ body: JSON.stringify({ img_path: imgPath }),
28
+ });
29
+ const caption = await response.json();
30
+ outputDiv.innerHTML = `Generated Caption: ${caption.caption}`;
31
+ } catch (error) {
32
+ console.error(error);
33
+ outputDiv.innerHTML = 'Error generating caption';
34
+ }
35
+ });
36
+
37
+ removeBackgroundBtn.addEventListener('click', async () => {
38
+ try {
39
+ const imgPath = imageInput.files[0].path;
40
+ const response = await fetch('/remove_background', {
41
+ method: 'POST',
42
+ headers: { 'Content-Type': 'application/json' },
43
+ body: JSON.stringify({ img_path: imgPath }),
44
+ });
45
+ const outputPath = await response.json();
46
+ outputDiv.innerHTML = `Removed Background: ${outputPath.output_path}`;
47
+ } catch (error) {
48
+ console.error(error);
49
+ outputDiv.innerHTML = 'Error removing background';
50
+ }
51
+ });
52
+
53
+ changeBackgroundBtn.addEventListener('click', async () => {
54
+ try {
55
+ const foregroundPath = imageInput.files[0].path;
56
+ const backgroundPath = 'path/to/background/image.jpg'; // Replace with the actual background image path
57
+ const response = await fetch('/change_background', {
58
+ method: 'POST',
59
+ headers: { 'Content-Type': 'application/json' },
60
+ body: JSON.stringify({ foreground_path: foregroundPath, background_path: backgroundPath }),
61
+ });
62
+ const outputPath = await response.json();
63
+ outputDiv.innerHTML = `Changed Background: ${outputPath.output_path}`;
64
+ } catch (error) {
65
+ console.error(error);
66
+ outputDiv.innerHTML = 'Error changing background';
67
+ }
68
+ });
static/style.css ADDED
@@ -0,0 +1,477 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /* General Reset */
2
+ * {
3
+ margin: 0;
4
+ padding: 0;
5
+ box-sizing: border-box;
6
+ }
7
+
8
+ /* Body Style */
9
+ body {
10
+ background-color: #1e1e1e; /* Dark background for contrast */
11
+ color: #ffffff; /* White text color */
12
+ font-family: Arial, sans-serif;
13
+ transition: background-color 0.5s ease, color 0.5s ease;
14
+ text-align: center; /* Center text for main layout */
15
+ }
16
+
17
+ /* App container: Sidebar + Content layout */
18
+ .app-container {
19
+ display: flex;
20
+ min-height: 100vh;
21
+ background-color: #f8f9fa;
22
+ }
23
+
24
+ /* Sidebar styles */
25
+ .sidebar {
26
+ background-color: #343a40;
27
+ padding: 20px;
28
+ color: white;
29
+ height: 100vh;
30
+ width: 220px; /* Sidebar width */
31
+ }
32
+
33
+ /* Content section */
34
+ .content {
35
+ flex-grow: 1;
36
+ display: flex;
37
+ flex-direction: column;
38
+ background-color: #fff;
39
+ padding: 20px;
40
+ }
41
+
42
+ /* Header styles */
43
+ header {
44
+ background-color: #343a40; /* Dark background for the navbar */
45
+ padding: 15px;
46
+ }
47
+
48
+ /* Navbar Style */
49
+ .navbar {
50
+ display: flex;
51
+ justify-content: space-between;
52
+ align-items: center;
53
+ padding: 10px 20px;
54
+ }
55
+
56
+ /* Navbar content */
57
+ .nav-links {
58
+ list-style: none;
59
+ display: flex;
60
+ margin: 0;
61
+ padding: 0;
62
+ }
63
+
64
+ .nav-links li {
65
+ margin-left: 20px;
66
+ }
67
+
68
+ .nav-links a {
69
+ text-decoration: none;
70
+ color: white;
71
+ font-weight: bold;
72
+ padding: 0.5rem 1rem; /* Padding inside the links */
73
+ transition: background-color 0.3s; /* Smooth background color change */
74
+ }
75
+
76
+ /* Change link color on hover */
77
+ .nav-links a:hover {
78
+ background-color: rgba(255, 255, 255, 0.2); /* Slightly lighter on hover */
79
+ border-radius: 4px; /* Rounded corners on hover */
80
+ }
81
+
82
+ /* Active link style */
83
+ .nav-links a.active {
84
+ background-color: rgba(255, 255, 255, 0.3); /* Highlight active link */
85
+ }
86
+
87
+ /* Search form styles */
88
+ .search-form {
89
+ display: flex;
90
+ align-items: center;
91
+ }
92
+
93
+ .search-form input[type="text"] {
94
+ border: none;
95
+ padding: 8px;
96
+ border-radius: 4px;
97
+ margin-right: 5px;
98
+ background-color: #2c2c2c; /* Dark background for search input */
99
+ color: #ffffff; /* White text color */
100
+ }
101
+
102
+ .search-form button {
103
+ padding: 8px 12px;
104
+ border: none;
105
+ border-radius: 4px;
106
+ background-color: #007bff; /* Button color */
107
+ color: white;
108
+ cursor: pointer;
109
+ }
110
+
111
+ .search-form button:hover {
112
+ background-color: #0056b3; /* Darker on hover */
113
+ }
114
+
115
+ /* Form styles */
116
+ .form-container {
117
+ background-color: #252525;
118
+ padding: 20px;
119
+ border-radius: 8px;
120
+ margin: 20px auto; /* Centering */
121
+ max-width: 600px; /* Maximum width for forms */
122
+ box-shadow: 0 4px 8px rgba(0, 0, 0, 0.5);
123
+ opacity: 0; /* Start invisible for animation */
124
+ transform: translateY(20px); /* Start slightly lower for effect */
125
+ animation: slideIn 0.5s forwards; /* Adding slide-in effect */
126
+ }
127
+
128
+ /* Input and Button Styles */
129
+ input[type="file"], button {
130
+ margin: 10px 0;
131
+ padding: 8px;
132
+ width: 100%; /* Make inputs full width */
133
+ border: none;
134
+ border-radius: 4px;
135
+ background-color: #3a3a3a;
136
+ color: #ffffff;
137
+ transition: background-color 0.3s ease, transform 0.3s ease; /* Smooth transition */
138
+ }
139
+
140
+ input[type="file"]:hover {
141
+ background-color: #4a4a4a; /* Change background on hover */
142
+ transform: scale(1.02); /* Slightly grow on hover */
143
+ }
144
+
145
+ button {
146
+ background-color: #007bff; /* Button color */
147
+ }
148
+
149
+ button:hover {
150
+ background-color: #0056b3; /* Darker on hover */
151
+ }
152
+
153
+ /* Animations */
154
+ @keyframes slideIn {
155
+ from {
156
+ opacity: 0;
157
+ transform: translateY(20px);
158
+ }
159
+ to {
160
+ opacity: 1;
161
+ transform: translateY(0);
162
+ }
163
+ }
164
+
165
+ /* Headings */
166
+ h1, h2 {
167
+ margin: 20px 0; /* Spacing around headings */
168
+ }
169
+
170
+ /* Results Container */
171
+ .results-container {
172
+ background-color: #000000;
173
+ padding: 20px;
174
+ border-radius: 8px;
175
+ margin: 20px auto; /* Centering */
176
+ max-width: 600px; /* Maximum width for results */
177
+ box-shadow: 0 4px 8px rgba(0, 0, 0, 0.5);
178
+ }
179
+
180
+ /* Responsive styles */
181
+ @media (max-width: 768px) {
182
+ .navbar {
183
+ flex-direction: column; /* Stack navbar items vertically on small screens */
184
+ }
185
+
186
+ .navbar .nav-link {
187
+ text-align: center; /* Center align links */
188
+ padding: 1rem; /* Slightly more padding */
189
+ }
190
+
191
+ .form-container,
192
+ .results-container {
193
+ width: 95%; /* Make forms/responses full width on smaller screens */
194
+ }
195
+ }
196
+ body {
197
+ background-color: #000000; /* Dark gray background */
198
+ font-family: Arial, sans-serif;
199
+ overflow: hidden; /* Add this to prevent scrolling */
200
+ }
201
+
202
+ /* Add a new container for the moving background effect */
203
+ .moving-background {
204
+ position: absolute;
205
+ top: 0;
206
+ left: 0;
207
+ width: 100%;
208
+ height: 100vh;
209
+ background-image: linear-gradient(to right, #333, #444, #555);
210
+ background-size: 300px 100vh;
211
+ animation: move-background 10s linear infinite;
212
+ }
213
+
214
+ @keyframes move-background {
215
+ 0% {
216
+ transform: translateX(0);
217
+ }
218
+ 100% {
219
+ transform: translateX(-300px);
220
+ }
221
+ }
222
+
223
+ .navbar {
224
+ background-color: #000000; /* Darker gray background for navbar */
225
+ padding: 1rem;
226
+ display: flex;
227
+ justify-content: center; /* Center the navbar elements horizontally */
228
+ align-items: center; /* Center the navbar elements vertically */
229
+ }
230
+
231
+ .navbar ul {
232
+ list-style: none;
233
+ margin: 0;
234
+ padding: 0;
235
+ display: flex;
236
+ justify-content: center; /* Center the navbar links horizontally */
237
+ }
238
+
239
+ .navbar li {
240
+ margin-right: 20px;
241
+ }
242
+
243
+ .nav-link {
244
+ color: #68E905; /* White text color */
245
+ text-shadow: #68E905;
246
+ padding: 10px 20px; /* Add padding to create a box around the link */
247
+ border-radius: 20px; /* Add a rounded corner effect */
248
+ transition: none; /* Remove transition effect */
249
+ }
250
+
251
+ .nav-link:hover {
252
+ box-shadow: 0 0 10px #a5c747, 0 0 20px #a5c747, 0 0 30px #a5c747; /* White shining neon effect */
253
+ }
254
+
255
+ main {
256
+ display: flex;
257
+ flex-direction: column;
258
+ align-items: center;
259
+ padding: 2rem;
260
+ }
261
+
262
+ h1, p {
263
+ color: #fff; /* White text color */
264
+ }
265
+
266
+ .login-container {
267
+ width: 500px;
268
+ background-color: #000000; /* Darker gray background for login container */
269
+ padding: 40px;
270
+ border-radius: 30px;
271
+ box-shadow: 0 0 900px #8605e9;
272
+ margin: 100px auto;
273
+ }
274
+
275
+ h1 {
276
+ text-decoration-color: #68E905;
277
+ color: #68E905; /* White text color */
278
+ text-align: center;
279
+ }
280
+
281
+ label {
282
+ color: #68E905; /* White text color */
283
+ }
284
+
285
+ input[type="text"], input[type="password"] {
286
+ width: 100%;
287
+ padding: 10px;
288
+ margin: 10px 0;
289
+ border: none;
290
+ border-radius: 5px;
291
+ background-color: #444;
292
+ color: #fff;
293
+ }
294
+
295
+ input[type="submit"] {
296
+ width: 100%;
297
+ padding: 10px;
298
+ margin: 10px 0;
299
+ border: none;
300
+ border-radius: 5px;
301
+ background-color: #68E905;
302
+ color: #000000;
303
+ cursor: pointer;
304
+ }
305
+
306
+ input[type="submit"]:hover {
307
+ background-color: #ffffff;
308
+ }
309
+
310
+ p {
311
+ color: #ffffff; /* White text color */
312
+ text-align: center;
313
+ }
314
+
315
+ a {
316
+ color: #68E905; /* Blue text color */
317
+ text-decoration: none;
318
+ }
319
+
320
+ a:hover {
321
+ color: #fa0000;
322
+ }
323
+ .pricing-container {
324
+ display: flex;
325
+ flex-wrap: wrap;
326
+ justify-content: center;
327
+ padding: 40px;
328
+ }
329
+
330
+ .pricing-plan {
331
+ background-color: #333;
332
+ padding: 20px;
333
+ margin: 20px;
334
+ border-radius: 10px;
335
+ box-shadow: 0 0 10px #8605e9;
336
+ width: 250px;
337
+ }
338
+
339
+ .pricing-plan h2 {
340
+ color: #68E905;
341
+ text-align: center;
342
+ }
343
+
344
+ .pricing-plan p {
345
+ color: #fff;
346
+ text-align: center;
347
+ }
348
+
349
+ .pricing-plan ul {
350
+ list-style: none;
351
+ padding: 0;
352
+ margin: 0;
353
+ }
354
+
355
+ .pricing-plan li {
356
+ color: #fff;
357
+ padding: 10px;
358
+ border-bottom: 1px solid #444;
359
+ }
360
+
361
+ .pricing-plan li:last-child {
362
+ border-bottom: none;
363
+ }
364
+
365
+ .btn {
366
+ background-color: #68E905;
367
+ color: #000;
368
+ padding: 10px 20px;
369
+ border: none;
370
+ border-radius: 5px;
371
+ cursor: pointer;
372
+ }
373
+
374
+ .btn:hover {
375
+ background-color: #ffffff;
376
+ }
377
+ .contact-container {
378
+ display: flex;
379
+ flex-direction: column;
380
+ align-items: center;
381
+ padding: 40px;
382
+ }
383
+
384
+ form {
385
+ display: flex;
386
+ flex-direction: column;
387
+ align-items: center;
388
+ padding: 20px;
389
+ border: 1px solid #000000;
390
+ border-radius: 10px;
391
+ box-shadow: 0 0 900px #a5c747;
392
+ width: 500px;
393
+ }
394
+
395
+ label {
396
+ color: #68E905;
397
+ padding: 10px;
398
+ }
399
+
400
+ input[type="text"], input[type="email"] {
401
+ width: 100%;
402
+ padding: 10px;
403
+ margin: 10px 0;
404
+ border: none;
405
+ border-radius: 5px;
406
+ background-color: #444;
407
+ color: #fff;
408
+ }
409
+
410
+ textarea {
411
+ width: 100%;
412
+ padding: 10px;
413
+ margin: 10px 0;
414
+ border: none;
415
+ border-radius: 5px;
416
+ background-color: #444;
417
+ color: #fff;
418
+ }
419
+
420
+ input[type="submit"] {
421
+ width: 100%;
422
+ padding: 10px;
423
+ margin: 10px 0;
424
+ border: none;
425
+ border-radius: 5px;
426
+ background-color: #ffffff;
427
+ color: #000;
428
+ cursor: pointer;
429
+ }
430
+
431
+ input[type="submit"]:hover {
432
+ background-color: #ffffff;
433
+ }
434
+
435
+ body {
436
+ margin: 0;
437
+ height: 100vh;
438
+ overflow: hidden; /* Prevent scrolling */
439
+ background: linear-gradient(270deg, #000000, #32002f, #1c0000);
440
+ background-size: 400% 400%;
441
+ animation: gradient 5s ease infinite;
442
+ overflow-y: auto; /* Allow vertical scrolling */
443
+ min-height: 100vh; /* Ensure the body takes at least the full height of the viewport */
444
+ }
445
+
446
+ @keyframes gradient {
447
+ 0% {
448
+ background-position: 0% 50%;
449
+ }
450
+ 50% {
451
+ background-position: 100% 50%;
452
+ }
453
+ 100% {
454
+ background-position: 0% 50%;
455
+ }
456
+ }
457
+
458
+ .glowing-effect {
459
+ position: absolute;
460
+ width: 100px; /* Adjust size as needed */
461
+ height: 100px; /* Adjust size as needed */
462
+ border-radius: 50%;
463
+ background: rgba(0, 0, 0, 0.5);
464
+ box-shadow: 0 0 20px rgba(255, 255, 255, 0.8);
465
+ pointer-events: none; /* Prevent interaction */
466
+ transform: translate(-50%, -50%);
467
+ transition: background 0.3s ease;
468
+ }
469
+
470
+ .js-generated {
471
+ /* Additional styles for JavaScript-generated elements */
472
+ }
473
+ .text {
474
+ color: #ffffff; /* Text color */
475
+ font-style: italic; /* Italic style */
476
+ text-shadow: 0 0 5px #ee00ff; /* Brighter glow effect */
477
+ }
templates/contact.html ADDED
@@ -0,0 +1,33 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>Contact Us</title>
7
+ <link rel="stylesheet" href="/static/style.css">
8
+ </head>
9
+ <body>
10
+ <nav class="navbar">
11
+ <ul>
12
+ <li><a class="nav-link" href="index.html">Home</a></li>
13
+ <li><a class="nav-link" href="pricing.html">Pricing</a></li>
14
+ <li><a class="nav-link" href="contact.html">Contact Us</a></li>
15
+ <li><a class="nav-link" href="login.html">Login</a></li>
16
+ </ul>
17
+ </nav>
18
+ <main>
19
+ <h1>Contact Us</h1>
20
+ <div class="contact-container">
21
+ <form>
22
+ <label for="name">Name:</label>
23
+ <input type="text" id="name" name="name"><br><br>
24
+ <label for="email">Email:</label>
25
+ <input type="email" id="email" name="email"><br><br>
26
+ <label for="message">Message:</label>
27
+ <textarea id="message" name="message"></textarea><br><br>
28
+ <input type="submit " value="Send">
29
+ </form>
30
+ </div>
31
+ </main>
32
+ </body>
33
+ </html>
templates/index.html ADDED
@@ -0,0 +1,57 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ <!DOCTYPE html>
3
+ <html lang="en">
4
+ <head>
5
+ <meta charset="UTF-8">
6
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
7
+ <title>Background Changer and Caption Generator</title>
8
+ <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/5.1.3/css/bootstrap.min.css">
9
+ <link rel="stylesheet" href="/static/style.css">
10
+ </head>
11
+ <body>
12
+
13
+
14
+ <!-- <nav class="navbar">
15
+ <ul>
16
+ <li><a href="index.html" class="nav-link">Home</a></li>
17
+ <li><a href="pricing.html" class="nav-link">Pricing</a></li>
18
+ <li><a href="contact.html" class="nav-link">Contact Us</a></li>
19
+ <li><a href="login.html" class="nav-link">Login</a></li>
20
+ <li><a href="signup.html" class="nav-link">Sign Up</a></li>
21
+ </ul>
22
+ </nav> -->
23
+ <div class="text">
24
+ <h1>Hey, Instagram Creators! Are you ready to take your posts to the next level?</h1>
25
+ <h2>Generate stunning captions that resonate with your audience and transform your backgrounds effortlessly.</h2>
26
+ </div>
27
+ <main class="container mt-4">
28
+ <h1>Background Changer</h1>
29
+ <div class="form-container mb-4">
30
+ <form method="POST" enctype="multipart/form-data">
31
+ <h2>Select Foreground Image</h2>
32
+ <label for="foreground">Choose file</label>
33
+ <input type="file" id="foreground" name="foreground" required>
34
+
35
+ <h2>Select Background Image</h2>
36
+ <label for="background">Choose file</label>
37
+ <input type="file" id="background" name="background" required>
38
+
39
+ <button type="submit" class="btn btn-primary mt-2">Change Background</button>
40
+ </form>
41
+ </div>
42
+
43
+ <h1>Caption Generator</h1>
44
+ <div class="form-container">
45
+ <form method="POST" enctype="multipart/form-data">
46
+ <h2>Select Image for Caption Generation</h2>
47
+ <label for="image">Choose file</label>
48
+ <input type="file" id="image" name="image" required>
49
+ <button type="submit" class="btn btn-primary mt-2">Generate Caption</button>
50
+ </form>
51
+ </div>
52
+ </main>
53
+ <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
54
+ <script src="https://maxcdn.bootstrapcdn.com/bootstrap/5.1.3/js/bootstrap.bundle.min.js"></script>
55
+ <script src="C:\Users\jayesh777\OneDrive\Desktop\thaaproject2\static\script.js"></script>
56
+ </body>
57
+ </html>
templates/layout.html ADDED
@@ -0,0 +1,26 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>Background Changer and Caption Generator</title>
7
+ <link rel="stylesheet" href="{{ url_for('static', filename='style.css') }}">
8
+ </head>
9
+ <body>
10
+ <h1>Background Changer</h1>
11
+ <form method="POST" enctype="multipart/form-data">
12
+ <h2>Select Foreground Image</h2>
13
+ <input type="file" name="foreground" required>
14
+ <h2>Select Background Image</h2>
15
+ <input type="file" name="background" required>
16
+ <button type="submit">Change Background</button>
17
+ </form>
18
+
19
+ <h1>Caption Generator</h1>
20
+ <form method="POST" enctype="multipart/form-data">
21
+ <h2>Select Image for Caption Generation</h2>
22
+ <input type="file" name="image" required>
23
+ <button type="submit">Generate Caption</button>
24
+ </form>
25
+ </body>
26
+ </html>
templates/login.html ADDED
@@ -0,0 +1,43 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ <!DOCTYPE html>
3
+ <html lang="en">
4
+ <head>
5
+ <meta charset="UTF-8">
6
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
7
+ <title>Login</title>
8
+ <link rel="stylesheet" href="/static/style.css">
9
+ </head>
10
+ <body>
11
+ <header>
12
+ <nav class="navbar">
13
+ <div class="container">
14
+ <!-- <div class="logo">
15
+ <a href="{{ url_for('index.html') }}">Logo</a>
16
+ </div> -->
17
+ <ul class="nav-links">
18
+ <li><a href="{{ url_for('templates/pricing.html') }}">Pricing</a></li>
19
+ <!-- <li>
20
+ <form action="{{ url_for('search') }}" method="GET" class="search-form">
21
+ <input type="text" name="query" placeholder="Search..." required>
22
+ <button type="submit">Search</button>
23
+ </form>
24
+ </li> -->
25
+ <li><a href="{{ url_for('templates/login.html') }}">Login</a></li>
26
+ <li><a href="{{ url_for('templates/signup.html') }}">Signup</a></li>
27
+ <li><a href="{{ url_for('templates/contact.html') }}">Contact Us</a></li>
28
+ </ul>
29
+ </div>
30
+ </nav>
31
+ </header>
32
+
33
+ <main>
34
+ <h1>Login</h1>
35
+ <form action="{{ url_for('login_action') }}" method="POST">
36
+ <input type="text" name="username" placeholder="Username" required>
37
+ <input type="password" name="password" placeholder="Password" required>
38
+ <button type="submit">Login</button>
39
+ </form>
40
+ </main>
41
+ <script src="static/script.js"></script>
42
+ </body>
43
+ </html>
templates/output.html ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>Output</title>
7
+ <link rel="stylesheet" href="{{ url_for('static', filename='style.css') }}">
8
+ </head>
9
+ <body>
10
+ <h1>Output</h1>
11
+
12
+ {% if image_path %}
13
+ <h2>Changed Background Image:</h2>
14
+ <img src="{{ url_for('uploaded_file', filename='result.png') }}" alt="Result Image">
15
+ <br>
16
+ <a href="{{ url_for('uploaded_file', filename='result.png') }}">Download Result Image</a>
17
+ {% endif %}
18
+
19
+ {% if caption %}
20
+ <h2>Generated Caption:</h2>
21
+ <p>{{ caption }}</p>
22
+ {% endif %}
23
+
24
+ <br>
25
+ <a href="{{ url_for('index') }}">Back to Home</a>
26
+ </body>
27
+ </html>
templates/pricing.html ADDED
@@ -0,0 +1,54 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>Pricing</title>
7
+ <link rel="stylesheet" href="/static/style.css">
8
+ </head>
9
+ <body>
10
+ <nav class="navbar">
11
+ <ul>
12
+ <li><a class="nav-link" href="index.html">Home</a></li>
13
+ <li><a class="nav-link" href="pricing.html">Pricing</a></li>
14
+ <li><a class="nav-link" href="contact.html">Contact Us</a></li>
15
+ <li><a class="nav-link" href="login.html">Login</a></li>
16
+ </ul>
17
+ </nav>
18
+ <main>
19
+ <h1>Pricing</h1>
20
+ <div class="pricing-container">
21
+ <div class="pricing-plan">
22
+ <h2>Basic</h2>
23
+ <p>$9.99/month</p>
24
+ <ul>
25
+ <li>1 User</li>
26
+ <li>10GB Storage</li>
27
+ <li>Basic Support</li>
28
+ </ul>
29
+ <button class="btn">Sign Up</button>
30
+ </div>
31
+ <div class="pricing-plan">
32
+ <h2>Premium</h2>
33
+ <p>$19.99/month</p>
34
+ <ul>
35
+ <li>5 Users</li>
36
+ <li>50GB Storage</li>
37
+ <li>Premium Support</li>
38
+ </ul>
39
+ <button class="btn">Sign Up</button>
40
+ </div>
41
+ <div class="pricing-plan">
42
+ <h2>Enterprise</h2>
43
+ <p>Custom Pricing</p>
44
+ <ul>
45
+ <li>Unlimited Users</li>
46
+ <li>Unlimited Storage</li>
47
+ <li>Premium Support</li>
48
+ </ul>
49
+ <button class="btn">Contact Us</button>
50
+ </div>
51
+ </div>
52
+ </main>
53
+ </body>
54
+ </html>
templates/siginup.html ADDED
@@ -0,0 +1,43 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ <!DOCTYPE html>
3
+ <html lang="en">
4
+ <head>
5
+ <meta charset="UTF-8">
6
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
7
+ <title>Signup</title>
8
+ <link rel="stylesheet" href="/static/style.css">
9
+ </head>
10
+ <body>
11
+ <header>
12
+ <nav class="navbar">
13
+ <div class="container">
14
+ <!-- <div class="logo">
15
+ <a href="{{ url_for('index.html') }}">Logo</a>
16
+ </div> -->
17
+ <ul class="nav-links">
18
+ <li><a href="{{ url_for('templates/pricing.html') }}">Pricing</a></li>
19
+ <!-- <li>
20
+ <form action="{{ url_for('search') }}" method="GET" class="search-form">
21
+ <input type="text" name="query" placeholder="Search..." required>
22
+ <button type="submit">Search</button>
23
+ </form>
24
+ </li> -->
25
+ <li><a href="{{ url_for('templates/login.html') }}">Login</a></li>
26
+ <li><a href="{{ url_for('templates/signup.html') }}">Signup</a></li>
27
+ <li><a href="{{ url_for('templates/contact.html') }}">Contact Us</a></li>
28
+ </ul>
29
+ </div>
30
+ </nav>
31
+ </header>
32
+
33
+ <main>
34
+ <h1>Signup</h1>
35
+ <form action="{{ url_for('signup_action') }}" method="POST">
36
+ <input type="text" name="username" placeholder="Username" required>
37
+ <input type="email" name="email" placeholder="Email" required>
38
+ <input type="password" name="password" placeholder="Password" required>
39
+ <button type="submit">Signup</button>
40
+ </form>
41
+ </main>
42
+ </body>
43
+ </html>