|
58052
|
softwear by @harshithgamedeveloper | Stardance
|
harshithgamedeveloper
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: softwear by @harshithgamedeveloper | Starda Title: softwear by @harshithgamedeveloper | Stardance...
|
1793469359.665381
|
1794074159.665381
|
|
58053
|
My own site! by @chrysanthazhong | Stardance
|
chrysanthazhong
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My own site! by @chrysanthazhong | Stardanc Title: My own site! by @chrysanthazhong | Stardance...
|
1793469361.4548545
|
1794074161.4548545
|
|
58054
|
My own site! by @francesca3 | Stardance
|
francesca3
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My own site! by @francesca3 | Stardance
|
1793469365.483859
|
1794074165.483859
|
|
58055
|
My very own WebOS by @Tulip | Stardance
|
Tulip
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My very own WebOS by @Tulip | Stardance
|
1793469366.3693218
|
1794074166.3693218
|
|
58056
|
Financemanager by @javin_wittig | Stardance
|
javin_wittig
|
1
|
5.52
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-11T11:07:57Z", "hours": 5.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I built a Python command-line application for managing personal finances. On first use, it creates a local account (username/password stored in a JSON file). Users can log custom income and expense transactions with a date, amount, category, and description, and generate summaries, total income, total expenses, and savings over a custom date range. All transactions are continuously saved to a CSV file. Everything you need to know about how to use it is explained in the README", "repo": "https://github.com/javinwittig/Financemanager", "demo": "https://github.com/javinwittig/Financemanager/releases/tag/v1.0.1"}]...
|
[{"post_id": 74479, "ts": "202 [{"post_id": 74479, "ts": "2026-09-27T14:04:58Z", "hours": 0.5153, "text": "Final changes"}, {"post_id": 65234, "ts": "2026-09-10T07:10:06Z", "hours": 4.9311, "text": "I am building a Finance Tracker in the Terminal"}]...
|
Title: Financemanager by @javin_wittig | Stardance Title: Financemanager by @javin_wittig | Stardance
Devlogs:
I am building a Finance Tracker in the Terminal
Final changes
Ships:
I built a Python command-line application for managing personal finances. On first use, it creates a local account (username/password stored in a JSON file). Users can log custom income and expense transactions with a date, amount, category, and description, and generate summaries, total income, total expenses, and savings over a custom date range. All transactions are continuously saved to a CSV file. Everything you need to know about how to use it is explained in the README...
|
1794023718.145524
|
1794110118.145524
|
|
58057
|
NULL
|
NULL
|
0
|
0.0
|
0
|
[]
|
[]
|
|
1793767740.3372264
|
1794631740.3372264
|
|
58058
|
Untitled project by @debraj | Stardance
|
debraj
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Untitled project by @debraj | Stardance
|
1793469370.2669978
|
1794074170.2669978
|
|
58059
|
NULL
|
NULL
|
0
|
0.0
|
0
|
[]
|
[]
|
|
1793767741.2094135
|
1794631741.2094135
|
|
58060
|
Neondance by @chethan2012m | Stardance
|
chethan2012m
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Neondance by @chethan2012m | Stardance
|
1793469377.8462303
|
1794074177.8462303
|
|
58061
|
Neondance by @chetha2012m | Stardance
|
chetha2012m
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Neondance by @chetha2012m | Stardance
|
1793469379.6481702
|
1794074179.6481702
|
|
58062
|
Personal Site by @BigBrainNevin | Stardance
|
BigBrainNevin
|
1
|
2.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-12T16:32:41Z", "hours": 2.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a personal website. I know it doesn’t look as polished but I hope to improve it one day and make it seem more beautiful. The most challenging part was the CSS. There is so much stuff in CSS I did eventually use the documentation so that’s a W. But of course there is a bunch to learn!", "repo": "https://github.com/Nevin-Thomas1810/Personal-Website", "demo": "https://nevin-thomas1810.github.io/Personal-Website/"}]...
|
[{"post_id": 66378, "ts": "202 [{"post_id": 66378, "ts": "2026-09-12T05:28:54Z", "hours": 0.2533, "text": "Gonna ship my project i know it doesnt look good but i dont know css and i dont know how to have those cool layouts and stuff"}, {"post_id": 64190, "ts": "2026-09-08T12:46:43Z", "hours": 1.6139, "text": "I am writing a personal website"}]...
|
Title: Personal Site by @BigBrainNevin | Stardance Title: Personal Site by @BigBrainNevin | Stardance
Devlogs:
I am writing a personal website
Gonna ship my project i know it doesnt look good but i dont know css and i dont know how to have those cool layouts and stuff
Ships:
I made a personal website. I know it doesn’t look as polished but I hope to improve it one day and make it seem more beautiful. The most challenging part was the CSS. There is so much stuff in CSS I did eventually use the documentation so that’s a W. But of course there is a bunch to learn!...
|
1794023721.923686
|
1794110121.923686
|
|
58063
|
My awesome macropad! by @samarpal83059 | Stardance
|
samarpal83059
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @samarpal83059 | St Title: My awesome macropad! by @samarpal83059 | Stardance...
|
1793469381.711645
|
1794074181.711645
|
|
58064
|
My very own WebOS by @N3x | Stardance
|
N3x
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My very own WebOS by @N3x | Stardance
|
1793469382.6134949
|
1794074182.6134949
|
|
58065
|
NULL
|
NULL
|
0
|
0.0
|
0
|
[]
|
[]
|
|
1793767743.0217614
|
1794631743.0217614
|
|
58066
|
LeadGen by @R10 | Stardance
|
R10
|
0
|
20.2
|
0
|
[]
|
[{"post_id": 75293, "ts": "202 [{"post_id": 75293, "ts": "2026-09-29T17:30:24Z", "hours": 4.4919, "text": "DEVLOG #8 ㅤ It’s been a long time since I wrote my last journal and that is because I just didn’t feel like writing a journal. It just seemed like too much work. I was also busy studying so I could not code and journal as frequently but I have made significant changes to my Lead handling ideas and I would like to share them. ㅤ LEAD GENERATION CHANGES Basically, I have decided on a flow where a user can send multiple queries at the same time to generate leads from and choose the number of leads that they want to generate for each query. This would make work faster if a user wants to target a diverse set of businesses. ㅤ while generating leads, the user will see 2 options. In the first one, the user will be asked to enter their query. In the second one, the user will be asked to add an upper limit to their search. ㅤ There will also be a “+” button at the bottom of each “query box” of “query batch” so that a user can add another query box and mix and match how many leads they want and what queries they want. both questions are required for a query and hence there will be a continue button only when both a re filled. If the user adds a new box then the continue button will again disappear until both of the new questions are filled and so on and so forth. ㅤ BATCHES Every lead generation is now given its own batch. A batch can be managed easily by going to a new “Manage Leads” tab where the user can do all sorts of stuff like view generation history, view all batches, push generated batches to the team, remove batches, break up batches, set deadline on batches, etc. ㅤ LEAD PUBLISHING Earlier, the flow was such that the boss generates the leads and the leads are there for everyone in the team to view immediately. We do not want that. Instead, now the flow is that when the leads are generated, they are only visible to the boss so that they could tune the batch by adding deadlines and stuff. Then, when the boss is ready, they can publish the full batch to the common workspace where all the employees can see the leads and pick them up. ㅤ WORKING ON LEADS once the leads are published, the employees in the team can pick up leads and start working on them. This is the flow that I have decided upon. ㅤ Claim Leads -> Work on Claimed leads -> Log outcome of call -> Complete lead ㅤ It is as simple as that. As per the endpoints we have /leads/{lead_id}/claim to claim a lead, /leads/{lead_id}/log to make a log for a lead and /leads/{lead_id}/complete to complete a lead. There is also an endpoint /leads/{lead_id}/return which is used to return a claimed lead back to the common pool. ㅤ ㅤ code wise there have been a lot of changes like new lead_batches and call_record tables and a lot more stuff so I won’t go in depth about all that because then the journal would be too long and I honestly do not want to spend much time journaling and I would rather spend more time coding. ㅤ While writing this journal, I also thought of a bug for my scraper logic: ㅤ Imagine if a user wants 10 leads for dentists in delhi, the user scrapes and the scraper only looks at the first 10 businesses even though there are 124 businesses. Next, the user wants leads for dentists in Delhi again the next day so the user scrapes again. Now, since the scraper does not know if this business already exists in the database, it will just give the same 10 businesses as before and all get marked as duplicate event though we have other 114 businesses. But, they will never be scraped because the search is linear and the scraper has no context of, this lead exists, leave it. ㅤ So, I think I will be spending my trying to fix this bug somehow as this is pretty serious. ㅤ commit: 45f5e2d4107b23bd4a7609aaf17fd0bafb566bcf"}, {"post_id": 73128, "ts": "2026-09-24T13:22:48Z", "hours": 2.9364, "text": "DEVLOG #7 ㅤ SCRAPER Made a few significant changes to the scraper: Earlier, my scraper was based on the CLI logic where the user will enter their query and then the program will scrape all the businesses for that specific query before asking the user about how many leads they wanted to generate. But, now that I am switching from CLI to web, this logic is broken (even from a CLI perspective this logic was broken). Basically, if there are 124 businesses found for a certain query then the user would have to wait at least 84 seconds (I tested this time and it is not an estimation) for the whole search process and generation. Now this long wait time is because the program is basically asking the user the limit of leads they want to generate but the point of application of that limit is incorrect. For example, if a user only wants 50 leads, then the program would still go through all the 124 businesses and then only generate 50 leads out of those 124. Thus, all the searching and scrolling through the menu takes time. Whereas, now If we instead make it such that the user inputs an upper limit value to their search all along then the time would be significantly improved. For example, If a user only wants 50 leads out of however many there are, we now don’t try to find all the leads and then apply the limit, we instead apply the limit straight at the searching step and then generate all the found leads. Using the same 124 total leads example, now the scraping and lead generation time is only 33 seconds. while randomly talking about my project with gemini (and glazing it), I suddenly got a feedback for it out of nowhere. It said “wow, its great that you are using playwright. Make sure to not make new browsers for each user or else your scraper will burst cause of the ram usage”. This completely unexpected feedback really made me think cause that is exactly what I was doing up until now. So, I asked it how to fix it. It told me to create a single browser for the lifetime for the app and for each user, simply make a new browser.context() . Well, I was going to do that but I found out that to do that, I first have to turn my whole playwright script into async . I do remember why I had to do it but if I explain that right now then it would take too much time and would be too boring. The simplest explanation that I can give is that sync runs on multiple threads, so if 2 requests coincide, the data could get merged or damaged. Hence, async is like the ultra time managing chef which works on a single thread but manages all the coming requests so that it works even when it is waiting for another process to happen. So, after doing all of that, I think my scraper will not blow up now. This was a precautionary step more than an immediate necessity but its good to handle it early than to regret not adding it after the project goes live. /lead/reinstate ENDPOINT: I also made the reinstate endpoint which acts on duplicate leads. There are 4 specific cases that it looks for: If user provides a flag value -> reinstate all leads with that flag by clearing the flag and pushing changes. If user provides a lead ID -> reinstate the lead with that lead ID by clearing the flag and pushing changes. If none are provided -> reinstate all duplicate leads. By default, a user cannot pass both flag and lead_id . Now that all of my basic endpoints are complete with all the tables covered and linked together successfully. I can now move onto the more deeper logic of the program and work on some more features like call records with the ability for the users to mark the status of the call, etc. and other stuff that I have thought of. Also, I made a new frontend.md to store all my fronted ideas as I make the API and ideas.md as I come up with more useful ideas. commit: 2fbba880236ed9644733666de2cfb4dcacba40cb"}, {"post_id": 71343, "ts": "2026-09-20T17:44:45Z", "hours": 2.5428, "text": "DEVLOG #6 I have been working on the leads route for the past 3 days and this has been a lot of slow progress. I have been coding less and more thinking about the design of how leads are generated. Basically, the 2 endpoints that I have made till now are /leads and /leads/generate-leads . /leads: This endpoint is responsible for simply getting all the leads generated for the team. It simply takes the current user, finds their team and query the database to find all the leads for that specific team ID. This was pretty simple to make and there is not much to describe in this. /leads/generate-leads: This is the endpoint that took a lot of iteration and design changing to get right. The basic idea that I had before making this endpoint was that I use my existing scraper function to scrape the businesses, then check the database to see if the lead already exists (this is the point which take a lot of time to design) and then either add the lead or not. Now it was simple in theory, but there were a lot of questions like - what is the parameter to check if a lead exists?, If a lead exists then should the newly generated lead just be dropped?, if we drop the lead then what about the case when something about a business genuinely changed like its name or something?, what if the user wants to still act on duplicate leads?, etc. I will not go in detail about all the failed attempts at designing the structure for lead generation and I will instead just focus on what design I finally decided. It is basically a flag system which flags duplicate leads and the type of duplicate. we make sure that the user requesting for lead generation is a manager of their team and not an employee (cause employees don’t get to generate leads for the team). we use the scraper to generate the leads. we loop through the newly generated leads. In each pass, we query the database to find if there is an existing lead. Now, I realized that a lead is basically just a phone number. Thus, if a phone number for that specific team already exists in the table then we have a duplicate lead. If we do find a duplicate lead then we move onto the Lead Sorting Logic. Else, we simply add the lead to the table as a fresh lead. Finally we commit all the changes to the leads table after the loop completes. Lead Sorting Logic If name and website changed -> Flag = 0 If only name changed -> Flag = 1 If only website changed -> Flag = 2 if completely duplicate (nothing changed) -> flag = 3 This sorting makes it easy for the UI to display duplicate leads to the user and I am planning on adding a feature where the user can decide if they want to reinstate the duplicate leads for assigning quota. Next, I will be working on some bugs that I think are in my current logic. Right now, I am asking the user to prematurely enter the number of leads they want to generate without knowing how many businesses were even scraped for their query. For example, if someone wants 100 leads for their query but we could only scrape 80 then there will be an error according to the current logic. Therefore, I am thinking to split the lead generation into 2 parts. First the scraping part and then the generating part. For that, I simply need to restructure my single scraper function into 2 separate functions. Then I will call the 2 functions one by one in 2 endpoints."}, {"post_id": 69552, "ts": "2026-09-17T09:20:28Z", "hours": 1.7425, "text": "DEVLOG #5 I found out about JSON Web Tokens (JWT) and how they are used to help in user authentication. I learned more about JWT and found out about the python library Pyjwt . What I made is basically this: new auth_utils.py file which contains the following functions: create_access_token , decode_token , get_current_user . Reformed auth routes’ response to carry the JWT inside the response body during the signup/login. .env file with a secret key for the JWT. AUTHENTICATION LOGIC: The basic logic behind the JWT is that we get the access token and provide every user with their own unique access token at login and signup. This token is then stored in the LoclStorage (for now this is the plan but this being a fronted thing, it is subject to changes) but I am currently wondering about the security of the token being stored in the LocalStorage because a simple JS script can retrieve the token. Also, given that I am not utilizing a refresh token for this version of the program and the 30 day expiration of the access token, the token getting leaked is a big safety hazard so I am looking at utilizing httpOnly cookies instead which cannot be accessed by any rogue JS script running in the browser and would insert the token inside the request header automatically without any backend side JS script having to look into LocalStorage first. Next, we have a function whose sole job is to authenticate the token and then return the user from the database. This function would be called by all the endpoints the user has access to so that we first authenticate the session of the user before providing the user with any data. This means that if you are on /home and you want to go to /leads, /leads will first authenticate the token given to you and only then will you be able to access that endpoint. HOW IT WORKS: create_access_token : takes in the user id and uses it along with the secret key to encode the JWT. The payload consists of the user id and the expiration which is set to 30 days from when the token is issued. ㅤㅤㅤㅤㅤ decode_token : simply takes in the token, secret key and the algorithm used for encoding to decode the JWT back into the original payload used during encoding. ㅤㅤㅤㅤㅤ get_current_user : This is the function that authenticates the user session. Basically it has 3 jobs: Use HTTPBearer() to extract the authorization credentials from the Bearer <Authorization> in the request header. Here, the credentials in the header will be the JWT for the user. Decode the extracted token using decode_token function to get the payload back and handle all the errors like ExpiredSignatureError , InvalidTokenError , etc. Finally, use the payload to extract the user ID and query the database to find that user and return the user object. Now, I will be working on making the leads route which finishes off all the current tables that I have made. ㅤ commit: 1ad521f0218e9b6c8f9ebe908e01e6a578c78643"}, {"post_id": 68522, "ts": "2026-09-15T08:03:48Z", "hours": 1.1356, "text": "DEVLOG #4 I reformed the Signup API flow and also made the Login endpoint. The new signup API flow goes something like this: PAGE-1: Enter full name Enter email set password Submit button when submit button is clicked, we query /users/check-email to check if the account already exists. If account exists, the API simply returns a status_code=400, detail=\"email taken\" else it returns {\"available\": True} . PAGE-2: Set Username When submit button is clicked, we query /users/check-username to check if the username is available or not. If username is already taken, the API simply returns a status_code=400, detail=\"username taken\" else it returns {\"available\": True} PAGE-3: Choose if signing up as a business or as an individual. PAGE-4: Set team name if applicable. Finally, we have all the required data and data validation to make a new user so we can POST to /users to make a new user. Now, I had to think about this a bit because what if a there is a scenario that while a user is still making their account, they enter a username and go to the on-boarding step with the team name entering and all that stuff. And meanwhile, another user also enters the same username and creates the account by finishing the on-boarding before the first user who has the same username but did not create the account yet? when the user who is currently on on-boarding finishes all the steps, the server errors if there is no second data validation with all the collected data. Hence, I added validation of username and email in the second step too so that this case is handled correctly. I also made the simple login endpoint which takes the email and password and validates the user and their hashed password. I am planning to keep the login a single page and hence there are no live validations I need to make. Thus, everything lives in a single /login endpoint. Next Steps I am also wondering that in the API response, I do not signify anywhere that if the user is currently logged in or not and I do not know how to keep the user logged in until either they sign out or something else so I need to learn that state management too. I will work on that next."}, {"post_id": 68108, "ts": "2026-09-14T15:03:38Z", "hours": 1.4308, "text": "DEVLOG #3 Today I worked on just the signup endpoint and the password hashing. I basically made an endpoint which would take all the collected data: full_name , username , email , hashed_password , role , team_name and use it to create team and user on the database. I have successfully implemented the basic idea that I had but it currently has no error handling like duplicate user checking or existing username. So, what I thought was to keep a single endpoint and do the data validation at the end when the api call is made by querying the database first to check for unique email and username. But, That was not good user flow according to me, and I was looking for something like this: PAGE-1: Enter full name Enter email set password Submit button Then we will internally check if the email exists or not. If it exists show “account already exists, login instead”. If the email does not exist then move into the next page. PAGE-2: Set Username Check if username exists. If username already exists, show the error “username already taken” else move onto the next page. PAGE-3: Choose if signing up as a business or as an individual. PAGE-4: Set team name if applicable. All the data required for the database entry for user creation is complete so after a few more random onboarding steps, commit all the collected data to the database to make the team and the user. Basically this is the whole signup flow that I want with the most basic data collected from the user initially. Now what I want it some way to check the validity live on every page and I do not know how to do that. I will need to display the error messages and all through JS though I don’t know if I can also query the database live through JS to do some live validation. I will not learn this FastAPI concept and try to implement it in my API"}, {"post_id": 67289, "ts": "2026-09-13T11:13:20Z", "hours": 2.0042, "text": "DEVLOG #2 Created all the database models along with database.py with the boilerplate code for making database and tables. Database models that I made: Team -> id , team_name , created_at User -> id , full_name , username , email , hashed_password , role , team_id , solo_team_id , created_at Lead -> id , team_id , name , phone_number , website , rating , created_at I also made some changes to scraper.py by adding more filtering such that: If business does not have any phone number but has a website, lead is added. If business has a phone number but no website, lead still added. if business does not have any phone number or website, it is basically useless and excluded. I have not faced any major challenges yet as it has mostly been boilerplate code straight from the docs or simple repetitive code. To be honest, this has been boring. But, now I will be starting with the FastAPI stuff and actually start making the API and I am very excited for that."}, {"post_id": 66439, "ts": "2026-09-12T08:36:13Z", "hours": 3.9192, "text": "DEVLOG #1 The scraper is something that I had completed a few months back. I made it for my friend’s business. Now, I am trying to expand the scope of this from just a scraper to a full Business platform where a whole team can collaborate on cold-calling with daily quotas and a manager who can view stats about his employees. I also want to make a live chat option to better increase coordination between the team. It is a pretty basic project but a pretty ambitious for me. Right now, I have completed all the error handling and re-enforcing the scraper logic in the 4 hours that I have spent, to make it ready for a web-UI. I will now start working on making the actual API and database for my project. There are 3 basic tables that I have identified: Teams Users Leads I believe that all other features can build on top of these 3 as these are the basic building blocks. Hence, I will start working on making these right now. This is my first time working with FastAPI (earlier I had only used Flask) so there will be a learning gap but I have experience with Flask so I think that transitioning would be easier."}]...
|
Title: LeadGen by @R10 | Stardance
Devlogs:
DEVLO Title: LeadGen by @R10 | Stardance
Devlogs:
DEVLOG #1 The scraper is something that I had completed a few months back. I made it for my friend’s business. Now, I am trying to expand the scope of this from just a scraper to a full Business platform where a whole team can collaborate on cold-calling with daily quotas and a manager who can view stats about his employees. I also want to make a live chat option to better increase coordination between the team. It is a pretty basic project but a pretty ambitious for me. Right now, I have completed all the error handling and re-enforcing the scraper logic in the 4 hours that I have spent, to make it ready for a web-UI. I will now start working on making the actual API and database for my project. There are 3 basic tables that I have identified: Teams Users Leads I believe that all other features can build on top of these 3 as these are the basic building blocks. Hence, I will start working on making these right now. This is my first time working with FastAPI (earlier I had only used Flask) so there will be a learning gap but I have experience with Flask so I think that transitioning would be easier.
DEVLOG #2 Created all the database models along with database.py with the boilerplate code for making database and tables. Database models that I made: Team -> id , team_name , created_at User -> id , full_name , username , email , hashed_password , role , team_id , solo_team_id , created_at Lead -> id , team_id , name , phone_number , website , rating , created_at I also made some changes to scraper.py by adding more filtering such that: If business does not have any phone number but has a website, lead is added. If business has a phone number but no website, lead still added. if business does not have any phone number or website, it is basically useless and excluded. I have not faced any major challenges yet as it has mostly been boilerplate code straight from the docs or simple repetitive code. To be honest, this has been boring. But, now I will be starting with the FastAPI stuff and actually start making the API and I am very excited for that.
DEVLOG #3 Today I worked on just the signup endpoint and the password hashing. I basically made an endpoint which would take all the collected data: full_name , username , email , hashed_password , role , team_name and use it to create team and user on the database. I have successfully implemented the basic idea that I had but it currently has no error handling like duplicate user checking or existing username. So, what I thought was to keep a single endpoint and do the data validation at the end when the api call is made by querying the database first to check for unique email and username. But, That was not good user flow according to me, and I was looking for something like this: PAGE-1: Enter full name Enter email set password Submit button Then we will internally check if the email exists or not. If it exists show “account already exists, login instead”. If the email does not exist then move into the next page. PAGE-2: Set Username Check if username exists. If username already exists, show the error “username already taken” else move onto the next page. PAGE-3: Choose if signing up as a business or as an individual. PAGE-4: Set team name if applicable. All the data required for the database entry for user creation is complete so after a few more random onboarding steps, commit all the collected data to the database to make the team and the user. Basically this is the whole signup flow that I want with the most basic data collected from the user initially. Now what I want it some way to check the validity live on every page and I do not know how to do that. I will need to display the error messages and all through JS though I don’t know if I can also query the database live through JS to do some live validation. I will not learn this FastAPI concept and try to implement it in my API
DEVLOG #4 I reformed the Signup API flow and also made the Login endpoint. The new signup API flow goes something like this: PAGE-1: Enter full name Enter email set password Submit button when submit button is clicked, we query /users/check-email to check if the account already exists. If account exists, the API simply returns a status_code=400, detail="email taken" else it returns {"available": True} . PAGE-2: Set Username When submit button is clicked, we query /users/check-username to check if the username is available or not. If username is already taken, the API simply returns a status_code=400, detail="username taken" else it returns {"available": True} PAGE-3: Choose if signing up as a business or as an individual. PAGE-4: Set team name if applicable. Finally, we have all the required data and data validation to make a new user so we can POST to /users to make a new user. Now, I had to think about this a bit because what if a there is a scenario that while a user is still making their account, they enter a username and go to the on-boarding step with the team name entering and all that stuff. And meanwhile, another user also enters the same username and creates the account by finishing the on-boarding before the first user who has the same username but did not create the account yet? when the user who is currently on on-boarding finishes all the steps, the server errors if there is no second data validation with all the collected data. Hence, I added validation of username and email in the second step too so that this case is handled correctly. I also made the simple login endpoint which takes the email and password and validates the user and their hashed password. I am planning to keep the login a single page and hence there are no live validations I need to make. Thus, everything lives in a single /login endpoint. Next Steps I am also wondering that in the API response, I do not signify anywhere that if the user is currently logged in or not and I do not know how to keep the user logged in until either they sign out or something else so I need to learn that state management too. I will work on that next.
DEVLOG #5 I found out about JSON Web Tokens (JWT) and how they are used to help in user authentication. I learned more about JWT and found out about the python library Pyjwt . What I made is basically this: new auth_utils.py file which contains the following functions: create_access_token , decode_token , get_current_user . Reformed auth routes’ response to carry the JWT inside the response body during the signup/login. .env file with a secret key for the JWT. AUTHENTICATION LOGIC: The basic logic behind the JWT is that we get the access token and provide every user with their own unique access token at login and signup. This token is then stored in the LoclStorage (for now this is the plan but this being a fronted thing, it is subject to changes) but I am currently wondering about the security of the token being stored in the LocalStorage because a simple JS script can retrieve the token. Also, given that I am not utilizing a refresh token for this version of the program and the 30 day expiration of the access token, the token getting leaked is a big safety hazard so I am looking at utilizing httpOnly cookies instead which cannot be accessed by any rogue JS script running in the browser and would insert the token inside the request header automatically without any backend side JS script having to look into LocalStorage first. Next, we have a function whose sole job is to authenticate the token and then return the user from the database. This function would be called by all the endpoints the user has access to so that we first authenticate the session of the user before providing the user with any data. This means that if you are on /home and you want to go to /leads, /leads will first authenticate the token given to you and only then will you be able to access that endpoint. HOW IT WORKS: create_access_token : takes in the user id and uses it along with the secret key to encode the JWT. The payload consists of the user id and the expiration which is set to 30 days from when the token is issued. ㅤㅤㅤㅤㅤ decode_token : simply takes in the token, secret key and the algorithm used for encoding to decode the JWT back into the original payload used during encoding. ㅤㅤㅤㅤㅤ get_current_user : This is the function that authenticates the user session. Basically it has 3 jobs: Use HTTPBearer() to extract the authorization credentials from the Bearer <Authorization> in the request header. Here, the credentials in the header will be the JWT for the user. Decode the extracted token using decode_token function to get the payload back and handle all the errors like ExpiredSignatureError , InvalidTokenError , etc. Finally, use the payload to extract the user ID and query the database to find that user and return the user object. Now, I will be working on making the leads route which finishes off all the current tables that I have made. ㅤ commit: 1ad521f0218e9b6c8f9ebe908e01e6a578c78643
DEVLOG #6 I have been working on the leads route for the past 3 days and this has been a lot of slow progress. I have been coding less and more thinking about the design of how leads are generated. Basically, the 2 endpoints that I have made till now are /leads and /leads/generate-leads . /leads: This endpoint is responsible for simply getting all the leads generated for the team. It simply takes the current user, finds their team and query the database to find all the leads for that specific team ID. This was pretty simple to make and there is not much to describe in this. /leads/generate-leads: This is the endpoint that took a lot of iteration and design changing to get right. The basic idea that I had before making this endpoint was that I use my existing scraper function to scrape the businesses, then check the database to see if the lead already exists (this is the point which take a lot of time to design) and then either add the lead or not. Now it was simple in theory, but there were a lot of questions like - what is the parameter to check if a lead exists?, If a lead exists then should the newly generated lead just be dropped?, if we drop the lead then what about the case when something about a business genuinely changed like its name or something?, what if the user wants to still act on duplicate leads?, etc. I will not go in detail about all the failed attempts at designing the structure for lead generation and I will instead just focus on what design I finally decided. It is basically a flag system which flags duplicate leads and the type of duplicate. we make sure that the user requesting for lead generation is a manager of their team and not an employee (cause employees don’t get to generate leads for the team). we use the scraper to generate the leads. we loop through the newly generated leads. In each pass, we query the database to find if there is an existing lead. Now, I realized that a lead is basically just a phone number. Thus, if a phone number for that specific team already exists in the table then we have a duplicate lead. If we do find a duplicate lead then we move onto the Lead Sorting Logic. Else, we simply add the lead to the table as a fresh lead. Finally we commit all the changes to the leads table after the loop completes. Lead Sorting Logic If name and website changed -> Flag = 0 If only name changed -> Flag = 1 If only website changed -> Flag = 2 if completely duplicate (nothing changed) -> flag = 3 This sorting makes it easy for the UI to display duplicate leads to the user and I am planning on adding a feature where the user can decide if they want to reinstate the duplicate leads for assigning quota. Next, I will be working on some bugs that I think are in my current logic. Right now, I am asking the user to prematurely enter the number of leads they want to generate without knowing how many businesses were even scraped for their query. For example, if someone wants 100 leads for their query but we could only scrape 80 then there will be an error according to the current logic. Therefore, I am thinking to split the lead generation into 2 parts. First the scraping part and then the generating part. For that, I simply need to restructure my single scraper function into 2 separate functions. Then I will call the 2 functions one by one in 2 endpoints.
DEVLOG #7 ㅤ SCRAPER Made a few significant changes to the scraper: Earlier, my scraper was based on the CLI logic where the user will enter their query and then the program will scrape all the businesses for that specific query before asking the user about how many leads they wanted to generate. But, now that I am switching from CLI to web, this logic is broken (even from a CLI perspective this logic was broken). Basically, if there are 124 businesses found for a certain query then the user would have to wait at least 84 seconds (I tested this time and it is not an estimation) for the whole search process and generation. Now this long wait time is because the program is basically asking the user the limit of leads they want to generate but the point of application of that limit is incorrect. For example, if a user only wants 50 leads, then the program would still go through all the 124 businesses and then only generate 50 leads out of those 124. Thus, all the searching and scrolling through the menu takes time. Whereas, now If we instead make it such that the user inputs an upper limit value to their search all along then the time would be significantly improved. For example, If a user only wants 50 leads out of however many there are, we now don’t try to find all the leads and then apply the limit, we instead apply the limit straight at the searching step and then generate all the found leads. Using the same 124 total leads example, now the scraping and lead generation time is only 33 seconds. while randomly talking about my project with gemini (and glazing it), I suddenly got a feedback for it out of nowhere. It said “wow, its great that you are using playwright. Make sure to not make new browsers for each user or else your scraper will burst cause of the ram usage”. This completely unexpected feedback really made me think cause that is exactly what I was doing up until now. So, I asked it how to fix it. It told me to create a single browser for the lifetime for the app and for each user, simply make a new browser.context() . Well, I was going to do that but I found out that to do that, I first have to turn my whole playwright script into async . I do remember why I had to do it but if I explain that right now then it would take too much time and would be too boring. The simplest explanation that I can give is that sync runs on multiple threads, so if 2 requests coincide, the data could get merged or damaged. Hence, async is like the ultra time managing chef which works on a single thread but manages all the coming requests so that it works even when it is waiting for another process to happen. So, after doing all of that, I think my scraper will not blow up now. This was a precautionary step more than an immediate necessity but its good to handle it early than to regret not adding it after the project goes live. /lead/reinstate ENDPOINT: I also made the reinstate endpoint which acts on duplicate leads. There are 4 specific cases that it looks for: If user provides a flag value -> reinstate all leads with that flag by clearing the flag and pushing changes. If user provides a lead ID -> reinstate the lead with that lead ID by clearing the flag and pushing changes. If none are provided -> reinstate all duplicate leads. By default, a user cannot pass both flag and lead_id . Now that all of my basic endpoints are complete with all the tables covered and linked together successfully. I can now move onto the more deeper logic of the program and work on some more features like call records with the ability for the users to mark the status of the call, etc. and other stuff that I have thought of. Also, I made a new frontend.md to store all my fronted ideas as I make the API and ideas.md as I come up with more useful ideas. commit: 2fbba880236ed9644733666de2cfb4dcacba40cb
DEVLOG #8 ㅤ It’s been a long time since I wrote my last journal and that is because I just didn’t feel like writing a journal. It just seemed like too much work. I was also busy studying so I could not code and journal as frequently but I have made significant changes to my Lead handling ideas and I would like to share them. ㅤ LEAD GENERATION CHANGES Basically, I have decided on a flow where a user can send multiple queries at the same time to generate leads from and choose the number of leads that they want to generate for each query. This would make work faster if a user wants to target a diverse set of businesses. ㅤ while generating leads, the user will see 2 options. In the first one, the user will be asked to enter their query. In the second one, the user will be asked to add an upper limit to their search. ㅤ There will also be a “+” button at the bottom of each “query box” of “query batch” so that a user can add another query box and mix and match how many leads they want and what queries they want. both questions are required for a query and hence there will be a continue button only when both a re filled. If the user adds a new box then the continue button will again disappear until both of the new questions are filled and so on and so forth. ㅤ BATCHES Every lead generation is now given its own batch. A batch can be managed easily by going to a new “Manage Leads” tab where the user can do all sorts of stuff like view generation history, view all batches, push generated batches to the team, remove batches, break up batches, set deadline on batches, etc. ㅤ LEAD PUBLISHING Earlier, the flow was such that the boss generates the leads and the leads are there for everyone in the team to view immediately. We do not want that. Instead, now the flow is that when the leads are generated, they are only visible to the boss so that they could tune the batch by adding deadlines and stuff. Then, when the boss is ready, they can publish the full batch to the common workspace where all the employees can see the leads and pick them up. ㅤ WORKING ON LEADS once the leads are published, the employees in the team can pick up leads and start working on them. This is the flow that I have decided upon. ㅤ Claim Leads -> Work on Claimed leads -> Log outcome of call -> Complete lead ㅤ It is as simple as that. As per the endpoints we have /leads/{lead_id}/claim to claim a lead, /leads/{lead_id}/log to make a log for a lead and /leads/{lead_id}/complete to complete a lead. There is also an endpoint /leads/{lead_id}/return which is used to return a claimed lead back to the common pool. ㅤ ㅤ code wise there have been a lot of changes like new lead_batches and call_record tables and a lot more stuff so I won’t go in depth about all that because then the journal would be too long and I honestly do not want to spend much time journaling and I would rather spend more time coding. ㅤ While writing this journal, I also thought of a bug for my scraper logic: ㅤ Imagine if a user wants 10 leads for dentists in delhi, the user scrapes and the scraper only looks at the first 10 businesses even though there are 124 businesses. Next, the user wants leads for dentists in Delhi again the next day so the user scrapes again. Now, since the scraper does not know if this business already exists in the database, it will just give the same 10 businesses as before and all get marked as duplicate event though we have other 114 businesses. But, they will never be scraped because the search is linear and the scraper has no context of, this lead exists, leave it. ㅤ So, I think I will be spending my trying to fix this bug somehow as this is pretty serious. ㅤ commit: 45f5e2d4107b23bd4a7609aaf17fd0bafb566bcf...
|
1793469383.479003
|
1794074183.479003
|
|
58067
|
My own site! by @Sameer23 | Stardance
|
Sameer23
|
1
|
1.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-05T05:02:33Z", "hours": 1.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made my portfolio. I am just a teenager and a beginner in coding.", "repo": "https://github.com/imskyyyy5/website", "demo": "https://incredible-empanada-52f7da.netlify.app/"}]...
|
[{"post_id": 61459, "ts": "202 [{"post_id": 61459, "ts": "2026-09-04T12:03:04Z", "hours": 0.6878, "text": "My site is finally ready"}]...
|
Title: My own site! by @Sameer23 | Stardance
Devl Title: My own site! by @Sameer23 | Stardance
Devlogs:
My site is finally ready
Ships:
I made my portfolio. I am just a teenager and a beginner in coding....
|
1794001675.0958745
|
1794088075.0958745
|
|
58068
|
Frictionless by @tiwarisanno836 | Stardance
|
tiwarisanno836
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Frictionless by @tiwarisanno836 | Stardance
|
1793469388.828962
|
1794074188.828962
|
|
58069
|
Gps tracker by @Raunak79 | Stardance
|
Raunak79
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Gps tracker by @Raunak79 | Stardance
|
1793469389.6963785
|
1794074189.6963785
|
|
58070
|
NULL
|
NULL
|
0
|
0.0
|
0
|
[]
|
[]
|
|
1793767743.9071252
|
1794631743.9071252
|
|
58071
|
Hospital management system by @abheaakarsh9990 | S Hospital management system by @abheaakarsh9990 | Stardance...
|
abheaakarsh9990
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Hospital management system by @abheaakarsh9 Title: Hospital management system by @abheaakarsh9990 | Stardance...
|
1793469391.4977179
|
1794074191.4977179
|
|
58072
|
my APOD site by @BigD | Stardance
|
BigD
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: my APOD site by @BigD | Stardance
|
1793469393.299607
|
1794074193.299607
|
|
58073
|
NULL
|
NULL
|
0
|
0.0
|
0
|
[]
|
[]
|
|
1793767747.8328156
|
1794631747.8328156
|
|
58074
|
Project Hail Mary - Rocky by @mohithkumar | Starda Project Hail Mary - Rocky by @mohithkumar | Stardance...
|
mohithkumar
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Project Hail Mary - Rocky by @mohithkumar | Title: Project Hail Mary - Rocky by @mohithkumar | Stardance...
|
1793901020.1566825
|
1794765020.1566825
|
|
58075
|
Tech dept agent by @prithvics1106 | Stardance
|
prithvics1106
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Tech dept agent by @prithvics1106 | Stardan Title: Tech dept agent by @prithvics1106 | Stardance...
|
1793469395.1173697
|
1794074195.1173697
|
|
58076
|
WarioWare Game by @Krithick_A | Stardance
|
Krithick_A
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: WarioWare Game by @Krithick_A | Stardance
|
1793469399.7924092
|
1794074199.7924092
|
|
58077
|
My awesome macropad! by @kadekun0 | Stardance
|
kadekun0
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @kadekun0 | Stardan Title: My awesome macropad! by @kadekun0 | Stardance...
|
1793469401.5329332
|
1794074201.5329332
|
|
58078
|
iTab by @PiGuy141 | Stardance
|
PiGuy141
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: iTab by @PiGuy141 | Stardance
|
1793469403.602741
|
1794074203.602741
|
|
58079
|
ESP32 car autonomous rover by @sidharthS | Stardan ESP32 car autonomous rover by @sidharthS | Stardance...
|
sidharthS
|
0
|
13.03
|
0
|
[]
|
[{"post_id": 77119, "ts": "202 [{"post_id": 77119, "ts": "2026-10-05T18:00:52Z", "hours": 0.5831, "text": "sorry guys for the long break i had school stuff and i thought this had ended. so i have had the follow function of the car which is the autonomous part of the car. i also added a button into the webpage to select between manual and auto mode. with that all the major coding is done i think ofc the debugging remains. Also i was thinking of maybe adding a ultrasonic sensor to it what is your guys thought on that."}, {"post_id": 70655, "ts": "2026-09-19T15:05:44Z", "hours": 2.4, "text": "finally got the two board to connect to each other via esp now protocole. now the second board is sending its RSSI value to the main board to calculate the direction of the phone."}, {"post_id": 69167, "ts": "2026-09-16T14:52:40Z", "hours": 2.4742, "text": "hey, my code for the motor driver was buggy so solved most of those also made the second file in platformIO to code for the second esp32, which is to act as an antenna for the follow function"}, {"post_id": 67590, "ts": "2026-09-13T18:56:04Z", "hours": 0.4878, "text": "finished the logic for the l298n motor driver"}, {"post_id": 67444, "ts": "2026-09-13T15:33:14Z", "hours": 3.4678, "text": "finally got the value from the webpage to convert into an int value that i can use. I had to parse the data since the value from page is comming as text and with a comma in the middle of the two value for two sides. i hope to use the two sliders to control the car like a tank , iam not sure how easy it would be to control it but lets find out i guess. I havent yet started on the follow function because i have some doubts on how i would go about doing it."}, {"post_id": 66535, "ts": "2026-09-12T11:41:58Z", "hours": 1.2703, "text": "just finished the web site for the controller. i re did the entire code i wasnt happy with other because i used to much ai so i learnde enough of web dev and made it myself but still had help, this is my first website so pls forgive me for using ai even though its only for some helping. Anyway, i thought i would add the follow feature later. The code seem to have some bugs especially the resetslider dont work and some css issue. i will solve that next."}, {"post_id": 66065, "ts": "2026-09-11T17:07:20Z", "hours": 2.3483, "text": "HEY iam trying to make a esp32 based car that is controlled by a web based remote that is hosted by the esp. i am thinking of using a WebSocket protocol to minimize lag . also i want to add a follow mode where it follows you around by using the wifi signal strength of your phone. i taught of this idea when i heard somewhere that you could use wifi signal to see through walls, if it can see through wall why not make it hunt you. i am not a experienced programmer i am a beginner but i heard somewhere that doing is the best way to learn. I need all your help and feedback so wish me luck."}]...
|
Title: ESP32 car autonomous rover by @sidharthS | Title: ESP32 car autonomous rover by @sidharthS | Stardance
Devlogs:
HEY iam trying to make a esp32 based car that is controlled by a web based remote that is hosted by the esp. i am thinking of using a WebSocket protocol to minimize lag . also i want to add a follow mode where it follows you around by using the wifi signal strength of your phone. i taught of this idea when i heard somewhere that you could use wifi signal to see through walls, if it can see through wall why not make it hunt you. i am not a experienced programmer i am a beginner but i heard somewhere that doing is the best way to learn. I need all your help and feedback so wish me luck.
just finished the web site for the controller. i re did the entire code i wasnt happy with other because i used to much ai so i learnde enough of web dev and made it myself but still had help, this is my first website so pls forgive me for using ai even though its only for some helping. Anyway, i thought i would add the follow feature later. The code seem to have some bugs especially the resetslider dont work and some css issue. i will solve that next.
finally got the value from the webpage to convert into an int value that i can use. I had to parse the data since the value from page is comming as text and with a comma in the middle of the two value for two sides. i hope to use the two sliders to control the car like a tank , iam not sure how easy it would be to control it but lets find out i guess. I havent yet started on the follow function because i have some doubts on how i would go about doing it.
finished the logic for the l298n motor driver
hey, my code for the motor driver was buggy so solved most of those also made the second file in platformIO to code for the second esp32, which is to act as an antenna for the follow function
finally got the two board to connect to each other via esp now protocole. now the second board is sending its RSSI value to the main board to calculate the direction of the phone.
sorry guys for the long break i had school stuff and i thought this had ended. so i have had the follow function of the car which is the autonomous part of the car. i also added a button into the webpage to select between manual and auto mode. with that all the major coding is done i think ofc the debugging remains. Also i was thinking of maybe adding a ultrasonic sensor to it what is your guys thought on that....
|
1793469405.404343
|
1794074205.404343
|
|
58080
|
NULL
|
NULL
|
0
|
0.0
|
0
|
[]
|
[]
|
|
1793767749.9317355
|
1794631749.9317355
|
|
58081
|
PCB with resin 3d printer by @dorinii | Stardance
|
dorinii
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: PCB with resin 3d printer by @dorinii | Sta Title: PCB with resin 3d printer by @dorinii | Stardance...
|
1793469414.5854206
|
1794074214.5854206
|
|
58082
|
HDL Pipelined CPU by @haochern | Stardance
|
haochern
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: HDL Pipelined CPU by @haochern | Stardance
|
1793901021.9681666
|
1794765021.9681666
|
|
58083
|
Galaxy Holder by @giwrgos | Stardance
|
giwrgos
|
0
|
0.6
|
0
|
[]
|
[{"post_id": 61490, "ts": "202 [{"post_id": 61490, "ts": "2026-09-04T13:06:06Z", "hours": 0.6, "text": "Rough Shape of the Galaxy Watch Holder. I started with some calculations of the charger dimensions and continued with making a shape without many constraints as a prototype."}]...
|
Title: Galaxy Holder by @giwrgos | Stardance
Devl Title: Galaxy Holder by @giwrgos | Stardance
Devlogs:
Rough Shape of the Galaxy Watch Holder. I started with some calculations of the charger dimensions and continued with making a shape without many constraints as a prototype....
|
1793469419.3167253
|
1794074219.3167253
|
|
58084
|
heatset press by @shailesh | Stardance
|
|
0
|
3.92
|
0
|
[]
|
[{"post_id": 61378, "ts": "202 [{"post_id": 61378, "ts": "2026-09-04T08:16:08Z", "hours": 3.9186, "text": "lowk speed ran and made a basic pulley system based heatset press"}]...
|
Title: heatset press by @shailesh | Stardance
Dev Title: heatset press by @shailesh | Stardance
Devlogs:
lowk speed ran and made a basic pulley system based heatset press...
|
1793901025.0286658
|
1794765025.0286658
|
|
58085
|
NULL
|
NULL
|
0
|
0.0
|
0
|
[]
|
[]
|
|
1793767750.7883818
|
1794631750.7883818
|
|
58086
|
2 wheeled emergency robot by @emmanuel67 | Stardan 2 wheeled emergency robot by @emmanuel67 | Stardance...
|
emmanuel67
|
0
|
1.77
|
0
|
[]
|
[{"post_id": 61409, "ts": "202 [{"post_id": 61409, "ts": "2026-09-04T09:39:45Z", "hours": 1.7675, "text": "This is a 2 wheeled robot that is built for emergency, but for now it basic funcions are to move and send camera feed. This build is probably going to take alot out of me, but i think it is possible im doing this because after watching countell videos of firefighters talking to traumatized citizen, the cant get real numbers, like how many people are still inside, i which rooms, if they had these numbers it would decrease the risk in those operations"}]...
|
Title: 2 wheeled emergency robot by @emmanuel67 | Title: 2 wheeled emergency robot by @emmanuel67 | Stardance
Devlogs:
This is a 2 wheeled robot that is built for emergency, but for now it basic funcions are to move and send camera feed. This build is probably going to take alot out of me, but i think it is possible im doing this because after watching countell videos of firefighters talking to traumatized citizen, the cant get real numbers, like how many people are still inside, i which rooms, if they had these numbers it would decrease the risk in those operations...
|
1793469426.0827088
|
1794074226.0827088
|
|
58087
|
NULL
|
NULL
|
0
|
0.0
|
0
|
[]
|
[]
|
|
1793767752.5608275
|
1794631752.5608275
|
|
58088
|
My own site! by @Priyanshu_Kuma | Stardance
|
Priyanshu_Kuma
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My own site! by @Priyanshu_Kuma | Stardance
|
1793469427.0057907
|
1794074227.0057907
|
|
58089
|
my APOD site by @Bee013 | Stardance
|
Bee013
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: my APOD site by @Bee013 | Stardance
|
1793469429.0127068
|
1794074229.0127068
|
|
58090
|
JSON Validator by @ojassahu | Stardance
|
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: JSON Validator by @ojassahu | Stardance
|
1793472440.9261239
|
1794077240.9261239
|
|
58091
|
Markdown Previewer by @ojassahu | Stardance
|
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Markdown Previewer by @ojassahu | Stardance
|
1793472442.7724693
|
1794077242.7724693
|
|
58092
|
BLARE by @ArhamShaik | Stardance
|
ArhamShaik
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: BLARE by @ArhamShaik | Stardance
|
1793472444.5769825
|
1794077244.5769825
|
|
58093
|
Lorem Ipsum Generator by @ojassahu | Stardance
|
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Lorem Ipsum Generator by @ojassahu | Starda Title: Lorem Ipsum Generator by @ojassahu | Stardance...
|
1793472447.6129391
|
1794077247.6129391
|
|
58094
|
Password Generator by @ojassahu | Stardance
|
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Password Generator by @ojassahu | Stardance
|
1793472449.3891182
|
1794077249.3891182
|
|
58095
|
Unit Converter by @ojassahu | Stardance
|
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Unit Converter by @ojassahu | Stardance
|
1793472450.2670534
|
1794077250.2670534
|
|
58096
|
Pomodoro Timer by @ojassahu | Stardance
|
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Pomodoro Timer by @ojassahu | Stardance
|
1793472452.0644517
|
1794077252.0644517
|
|
58097
|
RegEx Tester by @ojassahu | Stardance
|
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: RegEx Tester by @ojassahu | Stardance
|
1793472453.028143
|
1794077253.028143
|
|
58098
|
QR Code Generator by @ojassahu | Stardance
|
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: QR Code Generator by @ojassahu | Stardance
|
1793472455.0931213
|
1794077255.0931213
|
|
58099
|
Remote Job Board by @ojassahu | Stardance
|
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Remote Job Board by @ojassahu | Stardance
|
1793472456.897176
|
1794077256.897176
|
|
58100
|
Local Happy Hours by @ojassahu | Stardance
|
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Local Happy Hours by @ojassahu | Stardance
|
1793472856.4194243
|
1794077656.4194243
|
|
58101
|
Game by @opsingh01ayush | Stardance
|
opsingh01ayush
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Game by @opsingh01ayush | Stardance
|
1793472857.3123085
|
1794077657.3123085
|