├── .github
└── workflows
│ └── jekyll-docker.yml
├── .gitignore
├── LICENSE
├── README.md
├── css
└── styles.css
├── images
├── large.png
└── vscode.png
├── index.html
└── js
└── scripts.js
/.github/workflows/jekyll-docker.yml:
--------------------------------------------------------------------------------
1 | name: Jekyll site CI
2 |
3 | on:
4 | push:
5 | branches: [master]
6 |
7 | pull_request:
8 | branches: [master]
9 |
10 | jobs:
11 | build:
12 |
13 | runs-on: ubuntu-latest
14 |
15 | steps:
16 | - name: Checkout source Git branch
17 | uses: actions/checkout@v4
18 |
19 | - name: Build the site in the jekyll/builder container
20 | run: |
21 | docker run \
22 | -v ${{ github.workspace }}:/srv/jekyll -v ${{ github.workspace }}/_site:/srv/jekyll/_site \
23 | jekyll/builder:latest /bin/bash -c "chmod -R 777 /srv/jekyll && jekyll build --future"
24 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | .vscode
2 | .DS_Store
3 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2023 Bob's Programming Academy
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Responsive Social Media Dashboard
2 |
3 | This is a responsive social media dashboard built using **HTML 5**, **CSS 3**, and **JavaScript**.
4 |
5 | 
6 |
7 | ## Table of Contents
8 | - [Prerequisites](#prerequisites)
9 | - [Running the application](#run-the-application)
10 | - [Copyright and License](#copyright-and-license)
11 |
12 | ## Prerequisites
13 |
14 | Install the following prerequisites:
15 |
16 | * [Visual Studio Code](https://code.visualstudio.com/download) with the **Live Server** extension.
17 |
18 | [Live Server](https://marketplace.visualstudio.com/items?itemName=ritwickdey.LiveServer) allows us to launch a local development server that enables a live reload of our project.
19 |
20 |
21 | ## Run the application
22 |
23 | To run the application, start the **Live Server** by clicking **Go Live** in the bottom right corner of the status bar in Visual Studio Code. This action will load the website in your default web browser.
24 |
25 | 
26 |
27 | ## View the application
28 |
29 | Once the **Live Server** is up and running, go to http://127.0.0.1:5500/index.html to view the application.
30 |
31 | ## Copyright and License
32 |
33 | Copyright © 2023 Bob's Programming Academy. Code released under the MIT license.
34 |
--------------------------------------------------------------------------------
/css/styles.css:
--------------------------------------------------------------------------------
1 | body {
2 | margin: 0;
3 | padding: 0;
4 | box-sizing: border-box;
5 | background-color: rgb(247, 246, 252);
6 | color: rgb(70, 71, 81);
7 | font-family: 'Open Sans', sans-serif;
8 | }
9 |
10 | .material-icons-outlined {
11 | vertical-align: middle;
12 | line-height: 1px;
13 | font-size: 30px;
14 | }
15 |
16 | .text-secondary {
17 | color: rgb(70, 71, 81);
18 | }
19 |
20 | .text-blue {
21 | color: rgb(29, 38, 154);
22 | }
23 |
24 | .background-blue {
25 | background-color: rgb(29, 38, 154);
26 | }
27 |
28 | .text-red {
29 | color: rgb(213, 0, 0);
30 | }
31 |
32 | .background-red {
33 | background-color: rgb(213, 0, 0);
34 | }
35 |
36 | .text-green {
37 | color: rgb(46, 125, 50);
38 | }
39 |
40 | .background-green {
41 | background-color: rgb(46, 125, 50);
42 | }
43 |
44 | .text-orange {
45 | color: rgb(255, 111, 0);
46 | }
47 |
48 | .background-orange {
49 | background-color: rgb(255, 111, 0);
50 | }
51 |
52 | .grid-container {
53 | display: grid;
54 | grid-template-columns: 260px 1fr 1fr 1fr;
55 | grid-template-rows: 0.2fr 3fr;
56 | grid-template-areas:
57 | 'sidebar header header header'
58 | 'sidebar main main main';
59 | height: 100vh;
60 | }
61 |
62 | /* ---------- HEADER ---------- */
63 |
64 | .header {
65 | grid-area: header;
66 | height: 70px;
67 | display: flex;
68 | align-items: center;
69 | justify-content: space-between;
70 | padding: 0 30px 0 30px;
71 | box-shadow: 0 6px 7px -4px rgba(0, 0, 0, 0.2);
72 | }
73 |
74 | .menu-icon {
75 | display: none;
76 | }
77 |
78 | /* ---------- SIDEBAR ---------- */
79 |
80 | #sidebar {
81 | grid-area: sidebar;
82 | height: 100%;
83 | background-color: rgb(29, 38, 154);
84 | color: rgb(255, 255, 255);
85 | overflow-y: auto;
86 | transition: all 0.5s;
87 | -webkit-transition: all 0.5s;
88 | }
89 |
90 | .sidebar-title {
91 | display: flex;
92 | justify-content: space-between;
93 | align-items: center;
94 | padding: 20px 20px 20px 20px;
95 | margin-bottom: 30px;
96 | }
97 |
98 | .sidebar-title > span {
99 | display: none;
100 | }
101 |
102 | .sidebar-brand {
103 | margin-top: 15px;
104 | font-size: 30px;
105 | font-weight: 700;
106 | }
107 |
108 | .sidebar-brand > .material-icons-outlined {
109 | font-size: 50px;
110 | }
111 |
112 | .sidebar-list {
113 | padding: 0;
114 | margin-top: 15px;
115 | list-style-type: none;
116 | }
117 |
118 | .sidebar-list-item {
119 | padding: 20px 20px 20px 20px;
120 | font-size: 18px;
121 | }
122 |
123 | .sidebar-list-item:hover {
124 | background-color: rgba(255, 255, 255, 0.2);
125 | cursor: pointer;
126 | }
127 |
128 | .sidebar-list-item > a {
129 | text-decoration: none;
130 | color: rgb(180, 184, 244);
131 | }
132 |
133 | .sidebar-responsive {
134 | display: inline !important;
135 | position: absolute;
136 | }
137 |
138 | /* ---------- MAIN ---------- */
139 |
140 | .main-container {
141 | grid-area: main;
142 | overflow-y: auto;
143 | padding: 20px 20px;
144 | }
145 |
146 | .main-title {
147 | display: flex;
148 | justify-content: space-between;
149 | }
150 |
151 | .main-cards {
152 | display: grid;
153 | grid-template-columns: 1fr 1fr 1fr 1fr;
154 | gap: 20px;
155 | margin: 20px 0;
156 | }
157 |
158 | .card {
159 | display: flex;
160 | flex-direction: column;
161 | justify-content: space-around;
162 | padding: 25px;
163 | color: rgb(255, 255, 255);
164 | border-radius: 30px;
165 | box-shadow: 0 6px 7px -4px rgba(0, 0, 0, 0.2);
166 | }
167 |
168 | .card:first-child {
169 | background-color: rgb(213, 0, 0);
170 | }
171 |
172 | .card:nth-child(2) {
173 | background-color: rgb(46, 125, 50);
174 | }
175 |
176 | .card:nth-child(3) {
177 | background-color: rgb(255, 111, 0);
178 | }
179 |
180 | .card:nth-child(4) {
181 | background-color: rgb(29, 38, 154);
182 | }
183 |
184 | .card-inner {
185 | display: flex;
186 | align-items: center;
187 | justify-content: space-between;
188 | }
189 |
190 | .card-inner > span {
191 | font-size: 50px;
192 | }
193 |
194 | .products {
195 | display: grid;
196 | grid-template-columns: 1fr 1fr;
197 | gap: 20px;
198 | }
199 |
200 | .product-card {
201 | height: 350px;
202 | background-color: rgb(255, 255, 255);
203 | padding: 25px;
204 | border-radius: 30px;
205 | box-shadow: 0 6px 7px -4px rgba(0, 0, 0, 0.2);
206 | }
207 |
208 | .product-description {
209 | padding-top: 50px;
210 | }
211 |
212 | .product-button {
213 | background-color: rgb(29, 38, 154);
214 | color: rgb(255, 255, 255);
215 | padding: 20px;
216 | border-radius: 30px;
217 | }
218 |
219 | .product-button > .material-icons-outlined {
220 | font-size: 50px;
221 | }
222 |
223 | .social-media {
224 | height: 350px;
225 | padding: 10px;
226 | }
227 |
228 | .product {
229 | display: grid;
230 | grid-template-columns: 1fr 1fr;
231 | gap: 20px;
232 | }
233 |
234 | .product-icon {
235 | color: rgb(255, 255, 255);
236 | width: 48px;
237 | height: 48px;
238 | display: flex;
239 | align-items: center;
240 | justify-content: center;
241 | border-radius: 20px;
242 | }
243 |
244 | .product-icon > .bi {
245 | font-size: 25px;
246 | }
247 |
248 | /* ---------- MEDIA QUERIES ---------- */
249 |
250 | /* Medium <= 992px */
251 | @media screen and (max-width: 992px) {
252 | .grid-container {
253 | grid-template-columns: 1fr;
254 | grid-template-rows: 0.2fr 3fr;
255 | grid-template-areas:
256 | 'header'
257 | 'main';
258 | }
259 |
260 | #sidebar {
261 | display: none;
262 | }
263 |
264 | .menu-icon {
265 | display: inline;
266 | }
267 |
268 | .sidebar-title > span {
269 | display: inline;
270 | }
271 | }
272 |
273 | /* Small <= 768px */
274 | @media screen and (max-width: 768px) {
275 | .main-cards {
276 | grid-template-columns: 1fr;
277 | gap: 10px;
278 | margin-bottom: 0;
279 | }
280 |
281 | .products {
282 | grid-template-columns: 1fr;
283 | margin-top: 30px;
284 | }
285 | }
286 |
287 | /* Extra Small <= 576px */
288 | @media screen and (max-width: 576px) {
289 | .header-left {
290 | display: none;
291 | }
292 | }
293 |
--------------------------------------------------------------------------------
/images/large.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BobsProgrammingAcademy/social-media-dashboard/1bb672aefa38eadfbd8c0d3767027d934836a7f2/images/large.png
--------------------------------------------------------------------------------
/images/vscode.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BobsProgrammingAcademy/social-media-dashboard/1bb672aefa38eadfbd8c0d3767027d934836a7f2/images/vscode.png
--------------------------------------------------------------------------------
/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | Admin Dashboard
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
37 |
38 |
39 |
40 |
86 |
87 |
88 |
89 |
90 |
91 |
DASHBOARD
92 |
93 |
94 |
95 |
96 |
97 |
98 |
LIKES
99 | thumb_up
100 |
101 |
4,021
102 |
103 |
104 |
105 |
106 |
SUBSCRIBERS
107 | subscriptions
108 |
109 |
8,731
110 |
111 |
112 |
113 |
114 |
FOLLOWERS
115 | groups
116 |
117 |
3,841
118 |
119 |
120 |
121 |
122 |
MESSAGES
123 | forum
124 |
125 |
1,962
126 |
127 |
128 |
129 |
130 |
131 |
132 |
133 |
Latest Updates
134 |
135 | Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce laoreet facilisis nulla, consectetur pulvinar diam. Aliquam tempus vel quam.
136 |
137 |
140 |
141 |
142 |
179 |
180 |
181 |
182 |
183 |
184 |
185 |
186 |
187 |
188 |
189 |
190 |
--------------------------------------------------------------------------------
/js/scripts.js:
--------------------------------------------------------------------------------
1 | // SIDEBAR TOGGLE
2 |
3 | let sidebarOpen = false;
4 | const sidebar = document.getElementById('sidebar');
5 |
6 | function openSidebar() {
7 | if (!sidebarOpen) {
8 | sidebar.classList.add('sidebar-responsive');
9 | sidebarOpen = true;
10 | }
11 | }
12 |
13 | function closeSidebar() {
14 | if (sidebarOpen) {
15 | sidebar.classList.remove('sidebar-responsive');
16 | sidebarOpen = false;
17 | }
18 | }
19 |
--------------------------------------------------------------------------------