Uptown Gallery is a vibrant and contemporary online platform dedicated to the world of urban modern art. This website serves as a dynamic space where art enthusiasts and collectors converge to discover, list, and bid on exquisite pieces of modern artwork.
-
Artwork Listing and Bidding: At the heart of Uptown Gallery is the ability for users to list and bid on artwork. This feature democratizes the art acquisition process, making it accessible and engaging for a broad audience of art lovers.
-
Admin-Controlled Curation: Our platform ensures the quality and authenticity of art pieces through a robust backend approval process. Admins have the capability to control and curate the artwork listed on the website, maintaining high standards and a diverse collection.
-
Admins are the curators and gatekeepers of the Uptown Gallery platform. Their primary role is to oversee and manage the listing of artwork, ensuring that each piece aligns with the gallery's standards and aesthetic. They possess a keen eye for quality and authenticity, and are responsible for maintaining the integrity and diversity of the art collections on the site. Admins facilitate a smooth, secure, and engaging experience for all users, handling the backend processes and making executive decisions about the content and functionality of the website.
-
Bidders are art enthusiasts and collectors, ranging from seasoned connoisseurs to newcomers in the art world. They are attracted to the platform for its diverse collection of urban modern art and the exciting opportunity to acquire unique pieces through the bidding process. Bidders appreciate the accessibility and convenience of online bidding, and they contribute to the vibrant community of the gallery through their participation and engagement. They value transparency, authenticity, and the thrill of discovering new artists and artworks.
-
Artists are the creative force behind Uptown Gallery, offering a window into the contemporary urban art scene. They are both creators and participants in the marketplace, listing their own artworks for sale and engaging with other artists and bidders. Artists on the platform are diverse in their styles and backgrounds, ranging from emerging talents to established names in the modern art scene. They seek a platform that not only showcases their work to a wider audience but also allows them to connect with fellow artists and art enthusiasts.
Note: The roles of Bidder and Artist are fluid on Uptown Gallery, with many users participating as both. This dual role fosters a rich, interactive community where users can experience the full spectrum of art appreciation, from creation to collection.The website is designed in such a way that Artists cannot Bid on their Artwork
Issue ID | User Story |
---|---|
#10 | As a As a buyer,I want to browse through available artworks.So that I can select one for purchase or to bid on. |
Issue ID | User Story |
---|---|
#11 | As a buyer,I want to place bids on artworks in the auction. So that I can win the auction. |
Issue ID | User Story |
---|---|
#13 | As a buyer,I want to be able to view my buying/bidding history in my profile.So that I can keep track of my bids. |
Issue ID | User Story |
---|---|
#15 | As a seller, I want to create listings for artworks that I want to sell.So that I can sell my work through the website. |
Issue ID | User Story |
---|---|
#16 | As a seller,I want to set starting bids and reserve prices for auction artworks.So that I can ensure my artwork sells for a reasonable price. |
Issue ID | User Story |
---|---|
#17 | As a seller,I want to view the status of my listed artworks and their auction results in a 'Seller Profile' section.So that I can manage my sales more efficiently. |
Issue ID | User Story |
---|---|
#19 | As an admin, I want to approve or reject artworks listed for auction/sale. So that I curate the art that my gallery sells. |
Issue ID | User Story |
---|---|
#20 | As an admin, I want to manage user accounts and their roles (buyer/seller, admin).So that I am able to control my website and permissions on it. |
Click here to view the Elements of the Design System
Color Palette
This color palette was selected to reflect the game theme, mood, contrast, and accessibility for an immersive and user-friendly experience.
This font was chosen for its bold and easy-to-read structure while maintaining the theme of the game.
Font
Major Mono Display imported from Google Fonts
Raleway 400 imported from Google Fonts
Iconography
Icons are taken from Bootstrap Icons
Additional Fonts, Buttons, Navbar, Activity Dasboard, Hover Effects and Cards
These elements are styled using Bootstrap 5.3
-
- Python 3.11.5: the primary language used to develop the server-side of the website.
- JS: the primary language used to develop interactive components of the website.
- HTML: the markup language used to create the website.
- CSS: the styling language used to style the website.
- Bootstrap: a CSS Framework used for developing responsive and mobile-first websites.
-
- SQLite: was used as a development database.
- PostgreSQL: the database used to store all the data.
-
- Git: the version control system used to manage the code.
- Pip3: the package manager used to install the dependencies.
- Gunicorn: the webserver used to run the website.
- Spycopg2: the database driver used to connect to the database.
- Django-allauth: the authentication library used to create the user accounts.
- Django-crispy-forms: was used to control the rendering behavior of Django forms.
- Heroku: the cloud platform used to host the website.
- ElephantSQL: the cloud database used to store all the data.
- GitHub: used to host the website's source code.
- VSCode: the IDE used to develop the website.
- Chrome DevTools: was used to debug the website.
- Bootstrap Icons: was used to create the icons used on the website.
- Miro was used to make a flowchart for the README file.
- Coolors was used to make a color palette for the website.
- W3C Validator: was used to validate HTML5 code for the website.
- W3C CSS validator: was used to validate CSS code for the website.
- JShint: was used to validate JS code for the website.
- PEP8: was used to validate Python code for the website.
- Django Q: Django Q is a native Django task queue, scheduler and worker application using Python multiprocessing. Used to update auction status after closure.
- Django Widget Tweaks: Used to add extra classes to django html.
- Django Debug Toolbar: Used to debug various aspects during development.
- Cloudinary: Image/file cloud hosting service.
- Whitenoise: tool used in Django applications for serving static files.
Github's issues, issue labels, milestones and project management board was used to help me track and organise the work in this project:
The issues where orgnaised into Milestones and custom labels where create to add context and detail to each issue and it's status :
And then displayed on my Project Management Board:
Sorted by Issue Status and Milestone, clicking into the issue allowed for viewing labels and updating them:
Please refer to the FEATURES.md file for all features-related documentation.
- During develoopment the database was created using SQLite.
- The database was then migrated to PostgreSQL.
UserProfile
Field | Type | Description |
---|---|---|
user |
OneToOneField | Linked to Django's User model |
name |
CharField | The name of the user |
shipping_address |
CharField | The shipping address of the user |
create_date |
DateTimeField | The date when the user profile was created |
Artwork
Model
Field | Type | Description |
---|---|---|
id |
AutoField | Primary key |
artist |
ForeignKey | Linked to UserProfile |
create_date |
DateTimeField | The date when the artwork was created |
title |
CharField | The title of the artwork |
description |
TextField | Description of the artwork |
image |
CloudinaryField | Image of the artwork |
category |
CharField | Category of the artwork |
approved |
BooleanField | Approval status of the artwork |
approval_status |
CharField | Detailed approval status (pending, approved, rejected) |
auction_start |
DateTimeField | Start date of the auction |
auction_duration |
CharField | Duration of the auction |
reserve_price |
DecimalField | Minimum price for the artwork |
Auction
Model
Field | Type | Description |
---|---|---|
id |
AutoField | Primary key |
artwork |
ForeignKey | Linked to Artwork model |
create_date |
DateTimeField | The date when the auction was created |
status |
CharField | Current status of the auction |
is_active |
BooleanField | Active status of the auction |
end_date |
DateTimeField | End date of the auction |
duration |
CharField | Duration of the auction |
reserve_price |
IntegerField | Minimum price for the artwork |
Bids
Model
Field | Type | Description |
---|---|---|
id |
AutoField | Primary key |
bidder |
ForeignKey | Linked to UserProfile model |
auction |
ForeignKey | Linked to Auction model |
amount |
DecimalField | Amount of the bid |
bid_time |
DateTimeField | Date and time when the bid was placed |
Please refer to the TESTING.md file for all test-related documentation.
-
The website was deployed to Heroku.
-
The database was deployed to ElephantSQL.
-
This website can be found here link.
Please refer to the DEPLOYMENT.md file for all deployment-related documentation.
- Custom 404/500 pages and views were taken from my mentor Juliia's ecommerce project and modified with her permission.
- All images used on the website are taken from Vecteezy under free license.
- Django Q information and setup was taken from this youtube video by Valentino Gagliardi.
- Lots of information taken from this youtube video on Django from FreeCodeCamp.
- The entire series on advacned Python from Patrick Loeber.
- This video on AJAX Requests from Net Ninja.
- I would like to acknowledge my daughter and husband for their support and understanding during this time of intense learning.
- My mentor Juliia for her guidance and suggestions, she has gone above and beyond and I am very grateful for her support and knowledge.