Giter Club home page Giter Club logo

juanfi's Introduction

JuanFi

JuanFi is an innovative open-source system designed for seamless coinslot integration with MikroTik Hotspot. It provides a comprehensive solution for managing and monetizing internet access through the integration of a coinslot mechanism. With JuanFi, hotspot owners can effortlessly incorporate a coinslot system into their network infrastructure, enabling them to offer paid internet access in an efficient and user-friendly manner.

Donation

We greatly appreciate donations as they help support the development and maintenance of JuanFi. If you wish to contribute and show your support, you can make a donation using the following methods: ``

Community Group

Join our vibrant community group to connect with other users and contributors. Share your experiences, exchange ideas, hotspot portals, and stay up to date with the latest developments and enhancements of JuanFi.

Features

Hardware Option

  • Wireless based
  • Lan based

Coinslot System

  • Mikrotik integration
  • Pause expiration
  • Codeless generation
  • Anti Coinslot abuse system
  • LCD Display
  • Code generation in vendo using LCD without device needed
  • Multi vendo system

Admin System

  • Initial setup of the system
  • Mikrotik connection setup, SSID setup, coinslot settings
  • Promo Rates configuration ( Rates, expiration)
  • Dashboard, Sales report
  • Custom pin configuration
  • coinslot abuse system config

Requirements

1.) NodeMCU(ESP8266) for wireless/lan or NodeMCU(ESP32) for wireless/lan

2.) Coinslot

3.) Mikrotik Router

4.) Access Point

5.) Node MCU baseboard( Optional for wireless)

6.) Power Supply (12v for nodeMCU, another 12v for Mikrotik)

7.) W5500 for Lan based

8.) LM2596 or any DC to DC buck that can convert to 5v for (Lan based only since no available baseboard for ESP32)


Architecture

alt text


ESP32 LAN Based Connection Diagram

alt text

ESP32 Wireless Based Connection Diagram

alt text

ESP8622 Wireless Based Connection Diagram

alt text

ESP8622 LAN Based Connection Diagram

alt text

Updated Connection diagram

Expand for more images

Credits to Tee Ay for the updated diagram

ESP8266 Simple Wireless

alt text

ESP8266 Simple Lan based

alt text

ESP8266 Wireless With Power Cut

alt text

ESP8266 Lan Based with Power Cut

alt text


Flashing the hardware

ESP8622 Flashing Instructions

Expand for Instructions

Here are the instructions to flash the ESP8622 using the custom pyflasher. Follow these steps to successfully flash the ESP8622 module with the required firmware.

Step 1: Download the Flashing Files

Download the necessary ESP8622 flashing files for your setup:

Step 2: Open the NodeMCU-PyFlasher

  1. Connect your ESP8622 to your PC.
  2. Open the NodeMCU-PyFlasher.exe application.

Step 3: Flashing JuanFi-FlashFile1.bin

  1. In the PyFlasher interface:
    • Select the file JuanFi-FlashFile1.bin.
    • Make sure the offset is set to 0x000000.
    • Click the Flash Nodemcu button and wait for the flashing process to complete.

Flash File 1

Step 4: Flashing JuanFi-FlashFile2.bin

  1. In the PyFlasher interface:
    • Select the file JuanFi-FlashFile2.bin.
    • Set the offset to 0x200000.
    • Click the Flash Nodemcu button and wait for the flashing process to complete.

Flash File 2

Step 5: Completing the Flashing Process

After flashing both files, your ESP8622 is now ready. Restart the NodeMCU to begin the setup.

Congratulations! You've successfully flashed your ESP8622 hardware and are ready to proceed with the JuanFi Setup.


ESP32 Flashing Instructions

Expand for Instructions

Follow these instructions to flash the ESP32 hardware using esptool.exe. This process will load the necessary firmware onto the ESP32 module.

Step 1: Download Flashing Files

Download the required flashing files based on your setup:

Step 2: Run the Flashing Script

  1. Double-click start_flash.bat.
  2. Connect your ESP32 to your PC using a USB cable.

Connect ESP32

  1. A command prompt will appear, prompting you to select an available COM port for your ESP32.

Select COM Port

Step 3: Select COM Port

  1. Choose the appropriate COM port for your ESP32 (e.g., COM9).
  2. Press "Enter."

Select COM Port

  1. A connecting message will appear, indicating the tool is attempting to connect to the ESP32.

Connecting

Step 4: Initiate Flashing

  1. Press and hold the flash button on the ESP32 for 3-5 seconds.
  2. The flashing process will start.

Initiate Flashing

Step 5: Wait for Completion

Wait for the flashing process to complete.

Step 6: Finish

After the flashing process is finished, you can disconnect the ESP32 from your PC. The device is now ready for the JuanFi Setup.

Congratulations! You've successfully flashed your ESP32 hardware and are ready to proceed with the JuanFi Setup.


Setting up the Vendo

1. Connect to JuanFi Setup

For Esp32/Esp8622 Wireless Based

  1. Look for the "JuanFi Setup" SSID on your device.
  2. connect to the SSID
  3. Access the admin panel in your browser at http://172.217.28.1/login.

Wireless Setup

For Esp32/Esp8622 LanBase

  1. Plug your vendo into your PC/Laptop's ethernet port.
  2. Set your PC/Laptop's IP address as static to 172.217.28.10:
    • IP address: 172.217.28.10
    • Subnet Mask: 255.255.255.0
    • Gateway: 172.217.28.10
    • DNS: 172.217.28.10
  3. Access the admin panel in your browser at http://172.217.28.1/login.

2. Login to Admin Panel

Use the following default credentials:

  • Username: admin
  • Password: admin

Admin Panel Login

8. Configure System

Configure the necessary fields according to your preferences, or upload a custom configuration file. The system will restart to apply the changes. The default Mikrotik API username and password are pisonet and abc123.

Note: Change the password of the operator account to prevent unauthorized access to the vendo.

Configure System

Configure Promo Rates

Configure Promo Rates

Mikrotik Setup

1. Setup Mikrotik Hotspot

Set up the Mikrotik hotspot server according to your configuration. You can find tutorials online for setting up a hotspot server in Mikrotik.

2. Add this initial script in your terminal

Execute on mikrotik terminal

/system scheduler add interval=1d name="Reset Daily Income" on-event="/system script set source=\"0\" todayincome " policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon start-date=Sep/28/2021 start-time=00:00:00;
/system scheduler add interval=30d name="Reset Monthly Income" on-event="/system script set source=\"0\" monthlyincome " policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon start-date=Sep/28/2021 start-time=00:00:00;
/system script add dont-require-permissions=no name=todayincome owner=admin policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="0";
/system script add dont-require-permissions=no name= monthlyincome owner=admin policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="0";
/ip hotspot walled-garden ip add action=accept disabled=no dst-address-list=JuanfiVendo
/ip firewall filter add action=accept chain=input place-before=0 comment=JuanfiVendo src-address-list=JuanfiVendo

3. Make NodeMCU IP Address Static

Set the IP address of your vendo (NodeMCU) to static to prevent it from changing addresses.

Static IP Address

Copy the mac-address and ip-address of your vendo and set the address-list to JuanfiVendo

Static IP Address

4. Add IP Bindings Exception on Hotspot

Ensure the vendo's MAC address and IP address are added to IP bindings exceptions to prevent unauthorized usage.

IP Bindings Exception

5. Modify vendoIpAddress in config.js

Modify the vendoIpAddress in the config.js file to match your setup.

Modify vendoIpAddress

6. Upload HTML Portal to Mikrotik

Upload the HTML portal to your Mikrotik files. You can find different portal designs in our Facebook Group Community.

7. Create User for NodeMCU API Access

Create a user for NodeMCU API access. The default user for NodeMCU is pisonet with password abc123. You can change it as needed.

NodeMCU API User


8.) Please add this script in the hotspot user profile on login event (credits to kristoff for adding sales)

Execute on mikrotik terminal Put on the on login script (with telegram support) please change accordingly with your hotspot folder(hex or haplite)

### enable telegram notification, change from 0 to 1 if you want to enable telegram
:local isTelegram 0;
###replace telegram token
:local iTBotToken "xxxxxxxxxx:xxxxxxxxxxxxx-xxxxxxxxxxxxxxx-xxxxx";
###replace telegram chat id / group id
:local iTGrChatID "xxxxxxxxxxxxxx";
### hotspot folder for HEX put flash/hotspot for haplite put hotspot only
:local HSFilePath "hotspot";
### enable Random MAC synchronizer
:local isRandomMacSyncFix 0;

### enable JuanFi online monitoring 0 = DoNotSend,  1=send data to api
:local apiSend 0;
### derive from the JuanFi online monitoring, create account in genman.projectdorsu.com
:local URLvendoID 5;

# Get User Data
:local aUsrNote [/ip hotspot user get $user comment];
:local aUsrNote [:toarray $aUsrNote];
:local iUsrTime [:totime ($aUsrNote->0)];
:local iSaleAmt [:tonum ($aUsrNote->1)];
:local iExtCode ($aUsrNote->2);
:local iVdoName ($aUsrNote->3);
:local iTimeMin [/ip hotspot user get $user limit-uptime];
:local iUserReg [/system scheduler find name=$user];

# Check User Data
:if (($iTimeMin>0) and ($iUsrTime>=0) and (($iUserReg="") or ($iExtCode=1))) do={
  /ip hotspot user set $user comment="";
  :local iFileMac;
  :local mac $"mac-address";
  :for i from=0 to=([:len $mac] - 1) do={
    :local chr [:pick $mac $i]
    :if ($chr = ":") do={ :set $chr "" }
    :set iFileMac ($iFileMac . $chr)
  }
# api tracking
  { /do {
  :local URLamount "$amt";
  :local URLcomment "ScriptOnLoginFINAL";
  :local URLip [:put [:tostr $address]];
  :local URLusr [$user];
  :local URLmac [$"mac-address"];
  :local URLipmac "$URLusr_$URLip_$URLmac";
  :local URLactive [/ip hotspot active print count-only];
  :if ($apiSend!=0)  do={
  /do {
  :local fixUrl [("https://juanfiapi.projectdorsu.com/serve.js\?s=stats&i=OE-IBX-12345&m=direct&payload=$URLvendoID")];
  :local apiUrl "$fixUrl_$URLamount_$URLipmac_$URLactive_$URLcomment";
  :log debug "API SendInfo: $apiUrl ";
  /tool fetch mode=https http-method=get url=$apiUrl keep-result=no
  :delay 1s;
  } on-error={:log error "API Vendo ERROR: $apiUrl ";} }
  } on-error={:log error "APIvendoRoutineError";} }
# Extend User
  :if (($iUserReg!="") and ($iExtCode=1)) do={
    :local iTimeInt [/system scheduler get $user interval];
    :set iTimeInt ($iTimeInt+$iUsrTime);
    :if ($iTimeMin>$iTimeInt) do={ :set iTimeInt ($iTimeMin+$iUsrTime) };
    /system scheduler set $user interval=$iTimeInt;
  }
# ADD User
  :local iDateBeg [/system clock get date];
  :local iTimeBeg [/system clock get time];
  :if ($iUserReg="") do={
    :local iTimeInt $iUsrTime;
    :if ($iTimeMin>$iUsrTime) do={ :set iTimeInt ($iTimeMin+$iUsrTime) };
    :do { /system scheduler add name="$user" interval=$iTimeInt \
      start-date=$iDateBeg start-time=$iTimeBeg disable=no \
      policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \
      on-event=("/ip hotspot user remove [find name=$user];\r\n".\
                "/ip hotspot active remove [find user=$user];\r\n".\
                "/ip hotspot cookie remove [find user=$user];\r\n".\
                "/system scheduler remove [find name=$user];\r\n".\
                ":do {/file remove \"$HSFilePath/data/$iFileMac.txt\"} on-error={};\r\n")
    } on-error={ log error "( $user ) /system scheduler add => ERROR ADD!" };
    :local x 10;:while (($x>0) and ([/system scheduler find name="$user"]="")) do={:set x ($x-1);:delay 1s};
  };
# Save Data File
  :if ([/file find name="$HSFilePath/data"]="") do={
    :do {/tool fetch dst-path=("$HSFilePath/data/.") url="https://127.0.0.1/"} on-error={ };
  }
  :local iValidUntil [/system scheduler get $user next-run];
  :if ([/system scheduler find name=$user]!="") do={
    /file print file="$HSFilePath/data/$iFileMac.txt" where name="dummyfile";
    :local x 10;:while (($x>0) and ([/file find name="$HSFilePath/data/$iFileMac.txt"]="")) do={:set x ($x-1);:delay 1s};
    /file set "$HSFilePath/data/$iFileMac" contents="$user#$iValidUntil";
  }
# Update Today Income
  :local iSaveAmt [:tonum [/system script get todayincome source]];
  :local iDailySales ($iSaleAmt + $iSaveAmt);
  /system script set todayincome source="$iDailySales";
# Update Monthly Income
  :local iSaveAmt [:tonum [/system script get monthlyincome source]];
  :local iMonthSales ( $iSaleAmt + $iSaveAmt );
  /system script set monthlyincome source="$iMonthSales";
# Telegram
  :if ($isTelegram=1) do={
    :local xVendo;
    :for i from=0 to=([:len $iVdoName] - 1) do={
      :local chr [:pick $iVdoName $i]
      :if ($chr = " ") do={ :set $chr "%20" }
      :set xVendo ($xVendo . $chr)
    }
    :local iUActive [/ip hotspot active print count-only];
    :local iMessage ("<<======New Sales======>>%0A".\
                     "Vendo: $xVendo %0A".\
                     "Voucher: $user %0A".\
                     "IP: $address %0A".\
                     "MAC: $mac %0A".\
                     "Amount: $iSaleAmt %0A".\
                     "Extended: $iExtCode %0A".\
                     "Total Time: $iTimeMin %0A %0A".\
                     "Today Sales: $iDailySales %0A".\
                     "Monthly Sales: $iMonthSales %0A".\
                     "Active Users: $iUActive %0A".\
                     "Valid Until: $iValidUntil %0A".\
                     "<<=====================>>");
    /tool fetch url="https://api.telegram.org/bot$iTBotToken/sendmessage\?chat_id=$iTGrChatID&text=$iMessage" keep-result=no;
  }
};
# Random Mac
:if ($isRandomMacSyncFix=1) do={
  :local cmac $"mac-address";
  :foreach AU in=[/ip hotspot active find user="$user"] do={
    :local amac [/ip hotspot active get $AU mac-address];
    :if ($cmac!=$amac) do={  /ip hotspot active remove [/ip hotspot active find mac-address="$amac"]; }
  }
}

Put on the on logout script

:if ($cause="session timeout") do={
  /system scheduler set [find name=$user] interval=5s;
}

alt text

Miscellaneous Scripts

You can create a scheduler to restart (System - > Scheduler) add your desired schedule and put this script or modify the existing template scripts below in your desired settings

  • 38vz2rb6nk - this is the API KEY you generate in admin panel
  • 10.10.10.251 - this is your ESP IP Address

Replace those value with your own setting

Restart vendo scheduler

Sample Script that run at 3am:

  /system scheduler add interval=1d name="Restart Vendo" on-event="/tool fetch http-method=post http-header-field=\"X-TOKEN: 38vz2rb6nk\" url=\"http://10.10.10.251/admin/api/restartSystem\"" policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon start-date=Sep/28/2021 start-time=03:00:00;

Night Light schedulers

Sample Script that turn on nightlight at 6 pm:

 /system scheduler add interval=1d name="Turn ON Night Light" on-event="/tool fetch http-method=post http-header-field=\"X-TOKEN: 38vz2rb6nk\" url=\"http://10.10.10.251/admin/api/toggerNightLight\?toggle=1\"" policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon start-date=Sep/28/2021 start-time=18:00:00;

Sample Script that turn off nightlight at 6 am:

 /system scheduler add interval=1d name="Turn OFF Night Light" on-event="/tool fetch http-method=post http-header-field=\"X-TOKEN: 38vz2rb6nk\" url=\"http://10.10.10.251/admin/api/toggerNightLight\?toggle=0\"" policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon start-date=Sep/28/2021 start-time=06:00:00;

Mikrotik Hotspot Portal

alt text

Admin Panel Dashboard

alt text

Contributing

Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.

Please make sure to update tests as appropriate.

License

MIT

juanfi's People

Contributors

edmarlozada avatar genmancoder avatar ivanalayan15 avatar kintoyyy avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

juanfi's Issues

Request: Timestamp on generated voucher code

Hi Ivan,

it would be nice if we add some time stamp on the generated voucher on the mikrotik users list. so that it would be a lot easier for us to trace voucher codes in case clients is having trouble connecting.

cheers!

Voucher prefix setting

Voucher prefix setting
add new setting in admin console to modify the prefix that voucher is generating, this will be very helpful to identify which vendo machine is the code was generated

Voucher generation option

Voucher generation option:
Username only
Username = password
This is to support mikmon voucher generated codes

Request: Add LCD

Can you please add an LCD in your diagram? Thank you. 16x2
Keep it up lods!

Request: Voucher Type

Sana sa susunod mo na project sir may VOUCHER TYPE, yung may EXTEND Time. Thank you sir.

Html template fixes

  • voucher clearing when insert coin in Login page
  • saving of last vendo connected when multi vendo mode
  • fix issue in old phones cannot click insert coin
  • fix issue in insert coin auto refresh when extending time
  • check coin ignore when connection error

Voucher code issue/Insert Coin

Found something but not sure if I'm the only one who encountered it.
Scenario:
Log out and Voucher code will be deleted if you accidentally press Insert Coin Button instead of Login button.
It would also be good if there's a Remaining Time display while on Pause or in log in page to see if you have still existing time left.

More power and kudos to you sir Ivan.

Juanfi Setup takes too long or never detected

Hi Ivan,

I am trying to use the .ino file other than the binary release files. I have noticed that when flashing .ino setup doesn't seem to show up in my wifi network. Yet but with binary it works juat fine.

Any advice?

API Connection

You can also add via api connection sir it is more secure than telnet.

Nodemcu Dashboard

when you edit system config then nodemcu seems not realy rebooted then LED indication wont light on 2 states blingking and running need to manual power off nodemcu to regain its connection

Thanks Admin!

ESP32 support

ESP32 support
-code to be compile in ESP32 for next gen lan implementation

Time validity changes

Current logic: When you have for example 5 php is 1 hour and the validity is 1 day, when you extend the time for example 5 php again then validity will become 2 day since it will add up also the validity.

Majority said the logic is correct and we should retain the current logic

But i will also consider other opinions since its also valid, i will add an option in Voucher setting to add optional behavior

Generate issue

hello po sir. pansin ko lang po pag tapos mo mag hulog tapos hindi mo pinundot ung save/connect hindi sya mag aauto generate ng code..

may lalabas na code sa portal pera hindi sya nag ccreate ng code sa Mikrotik..

salamat po

Relay trigger options

Currently the LED for system ready and insert coin is having a constant of trigger HIGH, means its having a positive output in the LED pins, but some are using blinking leds / coinslot led which is high voltage and it needs relay to drive it. And most of the available Relays in the market is trigger by LOW instead of HIGH.
it would be nice if have an option in
System configuration option to have
Relay Trigger:
HIGH
LOW

Anti-abuse for coinslot

Need to have anti-abuse mechanism for coinslot to prevent abusers to attempt coinslot reservation

Incorrect time generated by the voucher

Hi Ivan,

I had encountered another weird stuff. When inserted 1 or 5 or 10 peso coin the time displays is in random its not displaying the correct time anymore. I never change any settings when its working well during the first few days of testing. I also reflashed nodemcu but the problem still there.

I have checked all the wiring and everything is correct. I had a doubt about the coin acceptor. have you also encountered the same issue?

this issue started when nodemcu freezes during insert coin process.

have some thoughts about this?

cheers!

Enhancement ๐Ÿ’ฏ additional features

since the system doesn't use PROFILE account at the mikrotik side. Possible to ADD RX/TX (Que bandwidth management) at the RATES section AdminPORTAL SETUP. Sometimes there are vendo owner wants different SPEED Rates base on amount.

Also to Include ALL GPIO pin outs DROP DOWN LIST selection.

SETUP

hello sir ivan. pede po ba ung sa "lan based" setup, tulad din sa wireless ung may lalabas na juanfi setup para dun nalang mag ssetup?? ๐Ÿ’ฏ

Assigning Static IP on esp8266

Hi maybe this helps lets try to assign a static ip address on the device. using the esp8266WiFi.h library. i think this stops mikrotik from assigning a dynamic ip address each time esp8266 disconnected from the server.

//Define Static IP Settings
IPAddress local_IP(192,168,5,253);
IPAddress gateway(192,168,5,1);
IPAddress subnet(255,255,255,0);
IPAddress primaryDNS(8,8,8,8);
IPAddress secondaryDNS(8,8,4,4);

Voucher generation

Voucher code batch generation in admin panel for voucher type selling of voucher codes

Add show voucher code when coin inserted

Add show voucher code when coin inserted
this is notify the user about the code generated so that when save and connect button got problem he still received the voucher code and manually login it

Voucher invalid on realme mobile phone

Hi Ivan,

I encountered a strange behavior during login process using realme mobile phone. After the system voucher code generation, when pressed save and connect it throws an error (invalid voucher code.)

when you continuously press the connect button, it will be successfully connected but there is no such internet connection.
when I check on the active users it does not show any. but when you press logout button the voucher code display on the active users for just a few second or two.

not the usual behavior with other mobile phone.

Insert Coin / add time / Timer

If client forgot to click the the save and connect button or run out of time on the portal, after the dialog box closes the coins that are inserted added to the sales inventory but it wont add up time.

Insert Coin button and Promo Rates not loading

Hello again Ivan,

on login.html the insert coin button doesn't seem to work while the promo rates button does not load its rates using Android Galaxy S9 (Coinslot is not available as of this moment). Should this mobile compatibility issue? or a work in progress :)

cheers

LAN connection

How about lan connection via lan module w5500 sir? This is also optional for mcu stable connectivity. Thanks more power po

parequest :)

Untitled
pede po mag request? :)

sana po may ganito setup sa admin panel para maassign ung ip at maging static na po..

Issue: not mine(ctto)

Napan sin ko sir sa JuanFi

  1. Pag nagedit ka sa system config tas nagreboot. Ndi na xa connected manualy power off / onn

2.ung sa scheduler nia. Dindagdag ung current plus ung rate... Whic means ung 5php ko 2hrs pero validity nia 1day kung ada ako ng add nagdadag din ung validity nia sa scheduler.

3.ung s ap password di gumamana.. Pag nilalagyn ko ndi nkakak konek si node

Ps. For 24 hour test o o yan eto setu ko dun sa mga nag taning

Nilalagay ko nlng to sa github

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.