15 years ago I was in a similar situation. I was starting to get pretty good programming skills but I was also holding a job at the time. I wanted to further my programming skills but had no idea how to do so, how to freelance, or how anyone would know I had skills (all of my sites were "internal" at the time).
So I found the easiest thing to do was reach out to local businesses. I met with a sporting good store, a golf store and a pharmacy. I simply sat down with them and asked them how I could better change their workflow, how I could create a better customer interaction interface, how I could collect important information, and anything else they could need/want.
After the meetings there was a bit of confusion and hesitation. We met, they outlined what they needed, and I said "OK". No contract, no agreement, nothing. I simply promised them by a specific date that I would try to come as close to their expectations as possible. The clients from what I could tell had little to no expectations!
The first one I did was for a golf store. I created an inventory system, shopping cart, and various smaller programs that customers would use. I had a buddy do some graphics work and their site was completely redesigned. I spent a lot of time doing these things and learned a TON.
After 4 weeks I presented to the client their new website which I hosted in a folder off of a domain I owned. The client was astonished and we agreed on $2000 plus a maintenance contract. Their new site was up the next morning and ended up generating an 800% usage increase which I attribute to better design and also SEO design.
So basically I went all in and did work for free. It is a huge risk of time. Also if I would have negotiated a proper contract and I had experience I am sure the $2000 might have been missing a zero.
Even now as a very experienced web designer and going through many successful software integrations I still throw out the freebie bone if I have free time. Nothing wrong with talking with someone about a site/software issue they are having and solving it.
The main thing is find an opportunity. For example the last one I did was for a large local company that installed my new roof on house. Their website looked like it was an 8th graders class project. I talked to the owner about it and he said go ahead and do a mock up. 3 weeks later I emailed him a link to his "new site" which looked great but also kept track of customer billing and also had a calculator customers could use for quotes based on the type of house and materials. It wasn't a mock up because customers don't understand mock-ups. It was done perfect and he didn't argue at the price (which coincidentally was price of roof).
The gist of this story is pick low hanging fruit. I would not be calling up the president of roto-rooter because I thought their website sucked and one of their guys was at my house. Obviously they have spent money on their site, design, and backend. There are however thousands of businesses that need this sort of support. Often they don't do it because they don't want to shell out a few thousand dollars up front for a crappy developer... well second thought... almost all sites I have done were originally done by a crappy developer originally. And that brings me to the next point. If you are just learning and you give someone a so-so solution or site. Expect to not get anything for it.